仿照微信识别相册中二维码,写了一个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