android 获取本地图片路径失败,cursor.getString(column_index);返回null

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值