概述
参考(作者源码比较完善):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依赖
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、在调用二维码的界面中,添加调用二维码的触发事件,以及二维码扫描成功后的返回处理事件
/**
* 扫描按钮单击事件
* @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文件中添加权限配置
<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实现二维码扫描所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复