Android Zxing相册二维码/条码图片识别
在网上搜了好多例子放到项目中都会有些问题,有的是只能识别二维码图片无法识别条码图片,有的是可以识别条码但是识别率特别低。下面就介绍我整理过后在项目中使用的相册图片二维码条码识别集成步骤。
第一步 添加Zxing依赖
这里只介绍Android Studio中添加依赖的方法。
在app文件夹中build.gradle中的dependencies代码块儿中添加如下配置(ZXing版本根据需要引入):
compile 'com.google.zxing:core:3.2.0'
第二步 跳转相册
在项目中要跳转相册的点击事件中调用次方法,调用此方法后会跳转系统的相册界面,在系统相册界面选择好图片后会走activity的onActivityResult回调方法,并带回选中的图片的Uri。
publicvoid goToPhotoAlbum() {
Intent intent = new Intent(Intent.ACTION_PICK, null);
intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
activity.startActivityForResult(intent, IntentConstant.REQUEST_PHOTO_ALBUM);
}
第三步 在Activity的onActivityResult中处理Intent
在相册界面选中图片后会走onActivityResult回调方法。在回调方法中获取到intent中图片的Uri,再通过Uri获取到图片的真实路径,获取到路径后就可以识别图片
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// RESULT_OK 为Activity类中的常量,值为-1
if (resultCode == RESULT_OK && requestCode == 11) {
String photoPath = getRealFilePath(mContext,data.getData());
if (null == photoPath){
// 路径为null则获取图片失败
Toast.makeText(this, "图片获取失败,请重试", Toast.LENGTH_SHORT).show();
}else {
// 解析图片...
parsePhoto(photoPath);
}
}
}
通过Uri获取图片路径的方法如下(觉得不好用就从别的地方找吧,能实现功能就行):
@TargetApi(Build.VERSION_CODES.KITKAT)
public static String getPath(Context context, Uri uri) {
final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) {
if (isExternalStorageDocument(uri)) {
final String docId = DocumentsContract.getDocumentId(uri);
final String[] split = docId.split(":");
final String