Android基于红米系列手机读取本地图片路径失败的解决方案

最近 公司的项目上有 扫描二维码功能,当然必不可少的就会有读取本地二维码需求。首先就是跳转到本地相册,如下代码:


	/**
	 * show images in the android device media store
	 */
	public static void showPictures(Activity a,int type){
	   Intent innerIntent = new Intent(Intent.ACTION_GET_CONTENT);
           String IMAGE_UNSPECIFIED = "image/*";
           innerIntent.setType(IMAGE_UNSPECIFIED); 
           a.startActivityForResult(innerIntent, type);
	}

onActivityResult中获取图片路径,

  Uri uri = data.getData();
  String strPath = uri.getPath();
发现得到的path路径值不是图片在我们手机上的历经,在根据这个路径值获取图片或得到null,不知为啥,
这在大多数手机一般都没问题,但是我用的是红米手机,巨坑的手机之一,之前一直觉得搞开发魅族手机很坑了,原来小米也算其一啊。

然后再onActivityResult做如下处理,结果是二维码,和非二维码图片都可以扫描,并做出相应的处理;

 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        super.onActivityResult(requestCode, resultCode, data);
        Logger.i("test", "---------------------3---------------");
        if (data != null) {
            mProgress = new ProgressDialog(CaptureActivity.this);
            mProgress.setMessage("已扫描,正在处理...");
            mProgress.setCancelable(false);
            mProgress.show();
            final ContentResolver resolver = getContentResolver();
            Uri uri = data.getData();

            if (requestCode == TypeCodeing.REQUESTCODE_CAPTURE
                    && resultCode == RESULT_OK) {
                if (!TextUtils.isEmpty(uri.getAuthority())) {
                    Logger.e(this, "url=" + data.getData() + "=resolver=" + resolver);
                    Cursor cursor = resolver.query(uri, new String[]{MediaStore.Images.Media.DATA}, null,
                            null, null);
                    if (cursor != null) {
                        if (cursor.moveToFirst()) {
                            photoPath = cursor.getString(cursor
                                    .getColumnIndex(MediaStore.Images.Media.DATA));
                            cursor.close();

                        }
                    } else {
                        ToastUtil.show("啥也没扫出来,");
                        mProgress.dismiss();
                        return;
                    }
                }else{
                    photoPath = uri.getPath();
                }
                new Thread(new Runnable() {

                    @Override
                    public void run() {
                        // TODO Auto-generated method stub
                        Looper.prepare();
                        String result = parsLocalPic(photoPath);
                        Logger.e(this, "result=" + result + "=photoPath="
                                + photoPath);
                        if (result != null) {
                            if (handler == null) {
                                handler = new CaptureActivityHandler(
                                        CaptureActivity.this);
                            }
                            Message msg = new Message();
                            msg.obj = result;
                            msg.what = R.id.decode_succeeded;
                            handler.sendMessageDelayed(msg, 1000);
                        } else {
                            if (mProgress != null && mProgress.isShowing()) {
                                mProgress.dismiss();
                            }
                            ToastUtil.show("啥也没扫出来,要不换张图片试试( •̥́ ˍ •̀ू )");
                        }
                        Looper.loop();
                    }
                }).start();
            }
        } else {
            Logger.e(this, "data==" + data);
            ToastUtil.show("empty");
            return;
        }
    }

ok  搞定

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值