Android基于红米系列手机读取本地图片路径失败的解决方案
2016-09-14 10:30
465 查看
最近 公司的项目上有 扫描二维码功能,当然必不可少的就会有读取本地二维码需求。首先就是跳转到本地相册,如下代码:
/**
* 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 搞定
/**
* 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 搞定
相关文章推荐
- android红米等关于读取本地文件夹图片获取路径的问题的解决
- android红米等关于读取本地文件夹图片获取路径的问题的解决
- android红米等关于读取本地文件夹图片获取路径的问题的解决
- Android手机读取相册图片,根据URI获取图片路径
- Android 调用用相机拍照保存在本地,imageview根据路径读取图片
- Android 选取图片、手机拍照以及保存图片到本地、读取图片
- android读取手机sd卡单个图片,绝对路径
- Android 4.4 前后版本读取图库图片和拍照完美解决方案-获取文件路径
- Android手机图片上传 选择不了本地照片 解决方案
- android读取手机本地图片
- android 获取本地图片路径失败,cursor.getString(column_index);返回null
- android 获取本地图片路径失败,cursor.getString(column_index);返回null
- Android 使用ContentProvider扫描手机中的图片,仿微信显示本地图片效果
- 读取input:file的路径并显示本地图片的方法
- android 根据SD卡中图片路径读取并显示SD中的图片——源代码
- IE8.0 显示本地图片 img.src=本地图片路径无效的解决方案
- android端读取本地图片出现OutOfMemoryException
- 读取input:file的路径并显示本地图片的方法
- android 根据SD卡中图片路径读取并显示SD中的图片——源代码
- 读取input:file的路径并显示本地的图片