android仿微信识别相册中二维码图片信息

仿照微信识别相册中二维码,写了一个Demo,供参考使用

1、添加依赖,基于zxing,使用了Glide选择的图片进行了显示

    compile 'com.google.zxing:core:3.2.1'
    compile 'cn.bingoogolapple:bga-qrcodecore:1.1.3@aar'
    compile 'cn.bingoogolapple:bga-zxing:1.1.3@aar'
    compile 'com.github.bumptech.glide:glide:3.7.0'

2、详细代码,注释写的很清楚

 测试过程中发现小米手机相册返回的Uri格式会导致程序崩溃,对返回的Uri进行了处理,该问题已解决

/**
 * @author geqipeng
 * @date 2017/8/31
 */

public class ThirdActivity extends Activity {
    private static final int CODE_GALLERY_REQUEST = 1;
    private ImageView mImageShow;
    private TextView mTvContent;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_third);
        initView();
    }

    private void initView() {
        mImageShow = (ImageView) findViewById(R.id.image_show);
        mTvContent = (TextView) findViewById(R.id.tv_content);
        //选择相册中图片
        findViewById(R.id.btn_choice_pic).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intentFromGallery = new Intent();
                intentFromGallery.setType("image/*");
                intentFromGallery.setAction(Intent.ACTION_PICK);
                startActivityForResult(intentFromGallery, CODE_GALLERY_REQUEST);
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == CODE_GALLERY_REQUEST) {
            Uri uri = data.getData();
            String[] filePathColumn = {MediaStore.Audio.Media.DATA};
            if (null == filePathColumn) {
                return;
            }
            Cursor cursor = getContentResolver().query(getFileUri(uri), null, null, null, null);
            cursor.moveToFirst();
            //获取到的图片路径
            String photoPath = cursor.getString(cursor.getColumnIndex(filePathColumn[0]));
            cursor.close();
            //使用glide加载选择的图片
            Glide.with(this).load(uri).into(mImageShow);
            //显示获取到的信息
            String result = QRCodeDecoder.syncDecodeQRCode(photoPath);
            mTvContent.setText(result);


        }
    }

    /**
     * 处理uri方法,防止获取失败
     * @param uri
     * @return
     */
    private Uri getFileUri(Uri uri) {
        try {
            if (uri.getScheme().equals("file")) {
                String path = uri.getEncodedPath();
                if (path != null) {
                    path = Uri.decode(path);
                    ContentResolver cr = this.getContentResolver();
                    StringBuffer buff = new StringBuffer();
                    buff.append("(")
                            .append(MediaStore.Images.ImageColumns.DATA)
                            .append("=")
                            .append("'" + path + "'")
                            .append(")");
                    Cursor cur = cr.query(
                            MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                            new String[]{MediaStore.Images.ImageColumns._ID},
                            buff.toString(), null, null);
                    int index = 0;
                    for (cur.moveToFirst(); !cur.isAfterLast(); cur
                            .moveToNext()) {
                        index = cur.getColumnIndex(MediaStore.Images.ImageColumns._ID);
                        index = cur.getInt(index);
                    }
                    if (index == 0) {
                    } else {
                        Uri uri_temp = Uri
                                .parse("content://media/external/images/media/"
                                        + index);
                        if (uri_temp != null) {
                            uri = uri_temp;
                        }
                    }
                }
            }
        } catch (Exception e) {

        }
        return uri;
    }
}
3、layout布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/btn_choice_pic"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="选择图片"/>
    <ImageView
        android:id="@+id/image_show"
        android:layout_width="200dp"
        android:layout_height="200dp" />
    <TextView
        android:id="@+id/tv_content"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:textSize="14sp"/>


</LinearLayout>

4、效果图

吃水不忘挖井人:

  感谢:http://blog.csdn.net/fan7983377/article/details/51499508




  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值