图9 扫描二维码
public void onClick(View v) {
Intent openCameraIntent = new
Intent(BarCodeTestActivity.this,CaptureActivity.class); startActivityForResult(openCameraIntent, 0); }
4.3.3 数据解密
(1)解密算法设计。解密算法程序如图10所示。
图10解密算法程序图 public String decrypt(byte[] encryptData) throws UnsupportedEncodingException{ byte[] bytekey = key.getBytes();
byte[] result = new byte[encryptData.length];
- 14 -
result = DesEncrypt(bytekey, encryptData, 0); String deResult = new String(result); System.out.println(\
int dataLength = Integer.parseInt(deResult.substring(0, 4)); return deResult.substring(4, dataLength+4); }
(2)获取解密密钥。输入密钥,并且选择“显示”button,如图11所示。
图11输入密钥
public void onClick(View v) { }
key = QRStrEditText.getText().toString();
(3)获取到二维码解码后的字符串,并且根据key进行解密,输出密钥“key=12345678”。 public void handleDecode(Result result, Bitmap barcode) throws UnsupportedEncodingException { inactivityTimer.onActivity(); playBeepSoundAndVibrate();
String resultString = result.getText();
System.out.println(\String key = BarCodeTestActivity.getKey(); System.out.println(\
- 15 -
(4)处理扫描结果,如果密码正确,就在界面上显示,否则不显示。见图12。
图 12 密码检测程序
(5)调用DES程序对密钥key进行加密解密,并以Base64编码方式对结果字符串进行编码,输出加密后的字符串。 DES des= new DES(key);
byte[] encryptStrByte = Base64.decode(resultString); String decryptStr = des.decrypt(encryptStrByte); System.out.println(\
(6)本设计中代码生成的二维码经过扫描后得到的运行结果如图13与图14所示。图13是输入密钥并经过验证正确性通过后,选择open camera按钮,扫描二维码,并且经过该BarCodeTset.apk软件内部分析后,输出扫描到的二维码结果;图14则是输入错误的密码后,打开摄像机扫描二维码,但是界面没有任何变化 。
- 16 -
图13密码正确的运行结果 图14密码错误无运行结果
4.4 Android Camera的调用
在二维码的扫描过程中,对手机摄像头camera的调用可以说是重中之重,启用了多线程
对摄像头进行回调应用,如果一次回调的二维码图形没有成功识别,就开始下一次回调,直到识别出二维码编码为止。在设计中用initCamera()函数实现手机摄像头功能的开启。
将摄像头获取的正确的位图信息,以特定的算法对图像进行处理。经过图像预处理和定位点识别之后,识别出摄像头采集的图像含有的码图像,并且根据二维码的三个定位点将主体数据区域进行处理,将采集到的图片信息进行二值化操作,并将所得的数据发送给数据核心解码模块进行解析。
由于需要采集的二维码的大小不同,清晰度不同等诸多差异,手机的摄像头往往不能很好的采集图像,因此就要使摄像头进行自动对焦。当识别完成以后根据识别的结果,对用户进行提醒,通过二维码识别结果的成功或失败,让手机显示识别出来的结果,或者发出失败提示的声音。
5 系统调试及测试
5.1 系统调试
在程序的设计过程中,出现过很多语法错误,在程序运行时,进行程序正确性的检查从而发现错误,而这类的错误也是易于发现与解决的错误。还有很多逻辑错误则相对难以排查与解决,需要参考很多资料与相关文献解决问题。
5.2 系统测试
- 17 -
系统的测试是一项非常重要的步骤,是保证系统正确性的保证,系统中的各种错误也都需要通过测试来排查。但是测试的意义并不在于发现错误,而是让我们通过分析错误产生的原因与错误所在的程序部位,进而发现系统的缺陷与漏洞,最终完善系统。
5.3 测试结果
将具有Android系统的手机与电脑相连接,并且下载BarCodeTest.apk文件,安装该应用,并且打开,出现界面。之后手机就可以调用程序来调用摄像头来扫描生成的二维码,并进行识别。
5.4 测试阶段复审与评价
经过测试,表明该系统已基本达到预定的目标,符合需求分析阶段的全部能。总体而言,可以认为本系统基本功能已实现,可以投入运行。
- 18 -