android 4.4存储路径,Android 4.4从图库选择图片,获取图片路径并裁剪

报错信息:

Caused by: java.lang.SecurityException:

Permission Denial: opening provider

com.android.providers.media.MediaDocumentsProvider from

ProcessRecord{42dd83a8

18369:com.android.gallery3d/u0a44}(pid=18369, uid=10044) requires

android.permission.MANAGE_DOCUMENTS or

android.permission.MANAGE_DOCUMENTS

调用系统相册代码:

IntentalbumIntent=newIntent(Intent.ACTION_GET_CONTENT);

albumIntent.addCategory(Intent.CATEGORY_OPENABLE);

albumIntent

.setDataAndType(

MediaStore.Images.Media.EXTERNAL_CONTENT_URI,

"image/*");

startActivityForResult(albumIntent,

0x01);的方式来做,是调用系统图库来做,但是发现如果有图片是同步到google相册的话,图库里面能看到一个auto

backup的目录,点进去选图片的话是无法获取到图片的路径的.因为那些图片根本就不存在于手机上.然后看到无论是百度贴吧,Instagram,或者还有些会选取图片做修改的app,都是用一个很漂亮的图片选择器(4.4以上,4.3的还是用系统旧的图库)

这里先看下4.4之前的uri的形式:

Uri:

content://media/extenral/images/media/17766

是不是很熟悉?

再看4.4及以后的Uri形式:

content://com.android.providers.media.documents/document/image:2706

有时候格式:content://com.android.providers.media.documents/document/image:2706

网络上的代码要求的项目sdk版本>=4.4,项目低于4.4版本“DocumentsContract”类是不能使用的,链接:http://blog.csdn.net/tempersitu/article/details/20557383

下面的代码项目sdk版本是<4.4,安装到手机或平板sdk版本4.4以上不会报错。

原理:

一、先解析”

content://com.android.providers.media.documents/document/image:2706

得到“image:2706”,尔“2706”才是图片资源存储在数据库的id编号,

所以一旦遇到不是数字“A”就把字符串赋空。

二、通过“2706”id去查询数据库,得到文件的路径,再把路径转化为Uri。

三、文件存储的数据库路径“data/data/com.android.providers.media/databases”,里面就有两个数据库“external.db”,"internal.db",要root权限才能进去查看。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值