android 获取本地图片路径失败,cursor.getString(column_index);返回null
2017-10-13 13:38
751 查看
今天有个需求就是获取手机本地图片,然后二维码解析结果,跳转网页!
之前我获取图片的代码是这么写的
/* *
获取带二维码的相片进行扫描 */public
void pickPictureFromAblum(View
v) {
//
打开手机中的相册
Intent
innerIntent
=
new
Intent(Intent.ACTION_GET_CONTENT);
innerIntent.setType("image/*");
Intent
wrapperIntent
=
Intent.createChooser(innerIntent,
"选择二维码图片");
this.startActivityForResult(wrapperIntent,
1);}
而获取路劲的代码
Uri
uri
=
data.getData();if
(!TextUtils.isEmpty(uri.getAuthority()))
{ Cursor
cursor
=
getContentResolver().query(uri,
new
String[] {
MediaStore.Images.Media.DATA
},
null,
null,
null);
if
(null
==
cursor) {
Toast.makeText(this,
"图片没找到",
Toast.LENGTH_SHORT).show();
return;
}
cursor.moveToFirst();
int
column_index
=
cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
photo_path
=
cursor.getString(column_index);
cursor.close();}
else
{
photo_path
=
data.getData().getPath();}
之前我在测试机上运行后是能拿到路劲的,但是后来发现在4.4版本后就一直拿不到图片的路径,后来上网查找资料发现
这种方法调用图库并获取图片在android4.4版本之前是可行的,但是之后就不可行了,。根本原因是前者和后者返回的URI已经不是同一个了,前者URI中包含了文件的绝对路径,是有_data的,但是后者URI就没有了。所以你拿不到!
<4.4 URI:content://media/external/images/media/164 含有文件的绝对路径
》4.4URI :content://com.android.providers.media.documents/document/image:3951,只有文件的相对编号
两者返回的内容也有所不同
最终的解决方法其实很简单,就是Intent.ACTION_GET_CONTENT换成Intent.ACTION_PICK
Intent
innerIntent
=
new
Intent(Intent.ACTION_PICK);
// "android.intent.action.GET_CONTENT"innerIntent.setType("image/*");Intent
wrapperIntent
=
Intent.createChooser(innerIntent,
"选择二维码图片");this.startActivityForResult(wrapperIntent,
1);
虽然是个简单的bug,但是也留下点什么 防止后面会有兄弟同样的问题出现。
之前我获取图片的代码是这么写的
/* *
获取带二维码的相片进行扫描 */public
void pickPictureFromAblum(View
v) {
//
打开手机中的相册
Intent
innerIntent
=
new
Intent(Intent.ACTION_GET_CONTENT);
innerIntent.setType("image/*");
Intent
wrapperIntent
=
Intent.createChooser(innerIntent,
"选择二维码图片");
this.startActivityForResult(wrapperIntent,
1);}
而获取路劲的代码
Uri
uri
=
data.getData();if
(!TextUtils.isEmpty(uri.getAuthority()))
{ Cursor
cursor
=
getContentResolver().query(uri,
new
String[] {
MediaStore.Images.Media.DATA
},
null,
null,
null);
if
(null
==
cursor) {
Toast.makeText(this,
"图片没找到",
Toast.LENGTH_SHORT).show();
return;
}
cursor.moveToFirst();
int
column_index
=
cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
photo_path
=
cursor.getString(column_index);
cursor.close();}
else
{
photo_path
=
data.getData().getPath();}
之前我在测试机上运行后是能拿到路劲的,但是后来发现在4.4版本后就一直拿不到图片的路径,后来上网查找资料发现
这种方法调用图库并获取图片在android4.4版本之前是可行的,但是之后就不可行了,。根本原因是前者和后者返回的URI已经不是同一个了,前者URI中包含了文件的绝对路径,是有_data的,但是后者URI就没有了。所以你拿不到!
<4.4 URI:content://media/external/images/media/164 含有文件的绝对路径
》4.4URI :content://com.android.providers.media.documents/document/image:3951,只有文件的相对编号
两者返回的内容也有所不同
最终的解决方法其实很简单,就是Intent.ACTION_GET_CONTENT换成Intent.ACTION_PICK
Intent
innerIntent
=
new
Intent(Intent.ACTION_PICK);
// "android.intent.action.GET_CONTENT"innerIntent.setType("image/*");Intent
wrapperIntent
=
Intent.createChooser(innerIntent,
"选择二维码图片");this.startActivityForResult(wrapperIntent,
1);
虽然是个简单的bug,但是也留下点什么 防止后面会有兄弟同样的问题出现。
相关文章推荐
- android 获取本地图片路径失败,cursor.getString(column_index);返回null
- Android 4.4以上获取图片URI格式不同导致getContentResolver返回null
- 解决从相册获取图片路径cursor = getContentResolver().query(uri, proj, null, null, null)报空的问题
- Android 把bitmap转换成String,计算图片的缩放值,根据路径获得突破并压缩返回bitmap用于显示,获取保存 隐患检查的图片文件夹名称,获取保存图片的目录,根据路径删除图片,添加到图库
- Android 成功 使用GPS获取当前地理位置(解决getLastKnownLocation 返回 null)
- Android 解决miui中获取相册图片路径为null的情况
- android红米等关于读取本地文件夹图片获取路径的问题的解决
- Android 成功 使用GPS获取当前地理位置(解决getLastKnownLocation 返回 null)
- android 获取本地图片路径
- android红米等关于读取本地文件夹图片获取路径的问题的解决
- Android之图片压缩和Uri与String类型的路径转换,获取图片,文件大小的工具类
- Android 成功 使用GPS获取当前地理位置(解决getLastKnownLocation 返回 null)
- Android获取本地图片之ACTION_GET_CONTENT与ACTION_PICK区别
- Android 成功 使用GPS获取当前地理位置(解决getLastKnownLocation 返回 null)
- android获取网络图片的用法 BitmapFactory.decodeByteArray 返回null
- android获取返回图片的绝对路径
- Android 成功 使用GPS获取当前地理位置(解决getLastKnownLocation 返回 null)
- Android 成功 使用GPS获取当前地理位置(解决getLastKnownLocation 返回 null)
- string name = request.getParameter("name"); JAVA上传图片文件name返回空null解决办法
- android getActivity.findViewById获取ListView 返回NULL