今天有个需求就是获取手机本地图片,然后二维码解析结果,跳转网页!
之前我获取图片的代码是这么写的
/* *
获取带二维码的相片进行扫描
*/
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,但是也留下点什么 防止后面会有兄弟同样的问题出现。