IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 二维码接力运算之匿名打分app -> 正文阅读

[移动开发]二维码接力运算之匿名打分app

实验目的

1.通过Zxing库的加入,实现拍照和解读二维码等功能。

2.通过两轮扫码和运算,完成加密状态下的评委打分。

3.打造产品化界面。

?安装与学习以及跑通demo程序

介绍Zxing:Z*是一个开源Java类库用于解析多种格式的1D/2D条形码。目标是可以对QR编码、Data Matrix、UPC的1D条形码进行解码。 其提供了多种平台下的客户端包括:J2ME、J2SE和Android

需要注意的有:

在build.gradle的dependencies 中加入下面代码

?implementation 'com.journeyapps:zxing-android-embedded:3.6.0'

在AndroidManifest.xml中加入

<uses-permission android:name="android.permission.CAMERA"/>

当然也可以运行的时候同步加载权限:

boolean sSRPR=ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)|
????????ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.READ_EXTERNAL_STORAGE)|
????????ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA);
if(sSRPR){
????ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,
????????????Manifest.permission.READ_EXTERNAL_STORAGE,
????????????Manifest.permission.CAMERA
????},0);
}

  • 项目架构和二维码生成、解码实现方案:

?

?

各模块功能表:

CustomZxingView:自定义的扫码界面。由于Zxing自带的界面是横屏的,操作起来不太方便。于是按照微信扫一扫重写View,使之变成竖屏的。

实现方案就是用Canvas类进行画图:主要就是构造Rect矩形对象。

改写后的view和zxing库中的扫码效果比较如下:

?

?

?

MainActivity:程序入口,包含界面交互等。主要功能是实现二维码的生成和解码。

①首先将某个值生成二维码:创建一个HashMap对象,放置二维码的参数。然后设置二维码的纠错级别、字符编码、内容。然后创建一个描述二维码的类BigMatriix的对象,调用qrCodeWriter的encode()方法,将内容转换为二维码。最后就是展示二维码。先使用一个数组和两层循环,为二维码设置颜色;然后使用Bitmap类的对象,放置二维码图片。再通过imageView的set方法,将其显示在界面上。

?

?

②将二维码解码,转换为某个字符串:解码分成两步骤,首先在扫码的类中,设置decoratedBarcodeView用来当作界面读取二维码,然后根据captureManager对象获取后面用于反转二维码的内容。调用decode(),用于解析二维码信息。

?

?

QrCodeActivity:其对应的xml文件中含有DecoratedBarcodeView组件,用以抓取镜头中的二维码信息。

  • 功能实现以及关键代码:

?

期望功能:

(0)N个人。每个人持有两个数,评分数A、临时产生的随机数B。

?????要计算所有A的和,B是混淆用途。

?????第一个人当秘书。

(2)第一圈,从秘书开始,把自己的A和B相加,把和传递个下一个人。

?????下一个人继续加上自己的A和B,继续传下去,最后和回到秘书。

(3)第二圈,从秘书开始,把和减去B,把差传给下一个。

?????下一个人继续减去自己的B,继续传下去,最后差回到秘书。

(4)最后的差是所有A的和。

(5)除非某个人的上家和下家串通,否则无法知道这个人的数A。

设计方案:

(0)设计两个选项,一个是第一轮,一个是第二轮。

(2)第一轮的操作始终都是把获取到的二维码信息生成随机数、然后相加,生成另一个二维码。如果是第一个人,也就是生成二维码的时候,没有上一个二维码给出的信息,那个属性就置0。

(3)第二轮,就是把扫描的二维码信息直接减去自己的B(随机数),生成二维码。所以这个解码顺序可以和生成二维码的顺序不同。

(4)最后一个人(秘书)扫完码后就得到了最终得分,除以总人数就得到了平均分。(只给出总得分,平均分等其他数据根据需要去求取即可)

界面及测试:

用radiogroup+radiobutton选择当前所处的模式,即第一轮还是第二轮。

功能实现代码:

随机数:考虑到需要增强很大的扰乱性,就必须让随机数B远大于评分区间。不然会出现加了随机数还没及格的尴尬情况,就暴露了评委打分太低。所以本题我规定评分区间是1~100,所以随机数为500~1500范围。

数据表示和流程控制:数据包括A打分(1-100)、B随机数(500-1500)、Last

上一个人二维码信息(不同模式都需要用到进行加加减减),通过单击按钮选择当前模式,并改变记录信息和响应操作。

?

?

?

(2)编码和解码的函数改动:编码中,需要根据当前处于第几轮的模式,选择不同操作;如果第一轮,那么上一个人的二维码信息加上A和B的值,生成新的二维码信息;如果第二轮,那直接由上一个人的二维码信息减去B即可。对于解码,就更简单了,直接保存到Last中。

?

  • 产品化设计:

输入要求:(0)输入A后必须立即隐藏,通过setText实现

  1. A B不为空的情况下才会响应生成二维码的动作
  2. 不能显示“随机数”等信息,展示给用户的只能是一个个的功能,比如给button起名字:保存数据等。

  • 产品测试:

?

以两个人为例子,运行:

①输入打分,点击保存数据,会立即隐藏你打的分:

?

②生成二维码,继续接力!(此时保存随机数B,执行A+B协议)

?

?

③切换到第二轮,直接读取上一个A+B后值,得到加密后的769

④继续在第二轮状态下生成二维码,并扫码,最终获得93正确数据!

?

?

?

经宿舍内部成员测试,该app运行稳定且顺利!

Debug集锦:

①Manifest文件中一定要注册好所有的java类,以<Activity>的形式,否则可能出现点击按钮后闪退。

②为保证安全性,保存打分数据的同时会隐藏掉打分,然后再生成二维码的时候会显示没有内容。起初认为改造功能后,content还是从输入框读取导致的,应改成从属性中获取。我选择使用新对象,从而摆脱老对象控制限制。之后还是没有运行成功。然后我转换了思路,不清空输入框,而是改成白色字体也可以,但是依然不行,因为还有第二轮传递。我必须找到错因。我太粗心了,其实很简单,就把按钮单击事件的判断输入框是否为空去掉即可:

?

???????

?

3.还有一个严重的bug,就是我在保存数据的时候没有存A,导致只输出了B,所以第二轮接力最后一个人一定是0!!!修改如下:

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-12-25 11:21:31  更:2022-12-25 11:24:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 22:05:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码