我是靠谱客的博主 聪慧鸡,这篇文章主要介绍android使用zxing实现二维码扫描,现在分享给大家,希望可以做个参考。

参考(作者源码比较完善):https://blog.csdn.net/ahuyangdong/article/details/76405557

参考(这个也是参考上面大佬的):https://blog.csdn.net/qq_34261214/article/details/80428722

结合上述两个博文,其中有一些问题需要自己去调试,不能全套拿来就用,要理解才行。

 

补充一下zxing二维码的整合步骤,结合上面参考的两个大佬的资料调整整合出来

本人android studio版本3.2.1

1、引入zxing依赖

复制代码
1
implementation 'com.google.zxing:core:3.3.3' //引入zxing包

2、把涉及到二维码扫描的源码都挪到项目中

(1)java文件,并且把包依赖修改正确,R文件引用也改成自己项目的包名

(2)界面布局文件xml

其中activity_scanner.xml中的ViewfinderView要修改包名为当前项目的包名,不然没办法正确调用到ViewfinderView.java

(3)raw文件、mipmap文件、values文件、drawable文件等等也要拷贝,都有用到这些的

 

3、在调用二维码的界面中,添加调用二维码的触发事件,以及二维码扫描成功后的返回处理事件

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
/** * 扫描按钮单击事件 * @param view */ public void startQRCodeHandler(View view) { startQrCode(); } /** * 启动二维码扫描 */ private void startQrCode() { // 摄像机申请权限 if (ContextCompat.checkSelfPermission(HomeActivity.this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { // android 6.0以上需要动态申请权限 ActivityCompat.requestPermissions(HomeActivity.this, new String[]{Manifest.permission.CAMERA}, Constants.REQ_PERM_CAMERA); return; } // 访问手机存储申请权限 if (ContextCompat.checkSelfPermission(HomeActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { // android 6.0以上需要动态申请权限 ActivityCompat.requestPermissions(HomeActivity.this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, Constants.REQ_PERM_CAMERA); return; } // 二维码扫码 Intent intent = new Intent(HomeActivity.this, CaptureActivity.class); startActivityForResult(intent, Constants.REQ_QR_CODE); } /** * 重载扫描页activity返回函数(接受扫描码) * @param requestCode * @param resultCode * @param data */ @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); //扫描结果回调 if (resultCode == Activity.RESULT_OK){ if(requestCode == Constants.REQ_QR_CODE || requestCode == Constants.REQUEST_CODE_SCAN_GALLERY){ //扫描二维码或者扫描相册成功 Bundle bundle = data.getExtras(); String scanResult = bundle.getString(Constants.INTENT_EXTRA_KEY_QR_SCAN); Toast.makeText(HomeActivity.this,"扫描成功",Toast.LENGTH_SHORT).show(); //将扫描出的信息显示出来 //textView.setText(scanResult); showRemindDialog("温馨提示",scanResult); } } else { Toast.makeText(HomeActivity.this,"取消扫描",Toast.LENGTH_SHORT).show(); } } /** * 重载请求权限结果函数 * @param requestCode * @param permissions * @param grantResults */ @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); switch (requestCode) { case Constants.REQ_PERM_CAMERA: // 摄像头权限申请 if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // 获得授权 startQrCode(); } else { // 被禁止授权 Toast.makeText(HomeActivity.this, "请至权限中心打开本应用的相机访问权限", Toast.LENGTH_LONG).show(); } break; } }

因为高版本安卓摄像头,读取存储等权限需要动态申请,所以发起二维码扫描是,动态申请权限

 

4、manifests.xml文件中添加权限配置

复制代码
1
2
3
4
5
<uses-permission android:name="android.permission.INTERNET" /> <!-- 网络权限 --> <uses-permission android:name="android.permission.VIBRATE" /> <!-- 震动权限 --> <uses-permission android:name="android.permission.CAMERA" /> <!-- 摄像头权限 --> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <!-- 读取手机存储权限 --> <uses-feature android:name="android.hardware.camera.autofocus" /> <!-- 自动聚焦权限 -->

 

大概就这样,我参考上面链接的两个大佬的源码自己做了,做了闪光灯和相册功能,调试代码后,使用一切正常

项目demo已上传csdn:https://download.csdn.net/download/fuck487/10847073

最后

以上就是聪慧鸡最近收集整理的关于android使用zxing实现二维码扫描的全部内容,更多相关android使用zxing实现二维码扫描内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(77)

评论列表共有 0 条评论

立即
投稿
返回
顶部