Android Zxing 相册二维码/条码图片识别

本文介绍了如何在Android项目中使用Zxing库进行相册图片的二维码和条码识别。首先,添加Zxing依赖,接着跳转到系统相册选择图片,然后在onActivityResult中处理图片Uri并获取图片路径,最后解析图片中的二维码或条码。提供了使用RxJava和AsyncTask两种异步解析方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值