| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
evjx0109
8年前发布

Android 外置SDCard读写权限总结

   <p>在 <strong> Android 4.4 </strong> 中,如果同时使用了机身存储和SD卡, 那么应用程序将无法在SD卡中创建、修改、删除数据。但是应用程序仍然可以往主存储(机身存储)的任意目录中写入数据,不受任何限制。</p>    <p>Google表示, 这样做的目的是,,通过这种方式进行限制,系统可以在应用程序被卸载后清除遗留文件。比如,你无法使用酷我音乐盒下载保存Mp3到外置存储卡了,也无法使用快读免费小说将TXT版小说下载保存到外置存储卡了</p>    <p>在Android <strong>开发者网站的 "外部存储技术信息"文档中描述道 : </strong></p>    <p><strong>WRITE_EXTERNAL_STORAGE</strong> 只为设备上的 <strong>主要外部存储</strong> 授予写权限, ,应用程序无法将数据写入二级外部存储设备,除非综合权限指定了应用程序的包目录。</p>    <p>这目前只影响双存储设备,如果你的设备有内部存储空间,即通常所说的机身存储,那么你的SD卡就是一个二级外部存储设备。</p>    <p><strong>那么Android 4.4 为何要限制 SD 卡读写?</strong></p>    <p>实际上这是个误解,当读完以下描述你会发现安卓4.4是加强了对SD卡的支持。</p>    <p>先定义几个术语,以避免二义性:</p>    <p><strong>内部存储</strong>:指/data分区。</p>    <p><strong>外部存储</strong>:指/sdcard分区。</p>    <p><strong>合并存储</strong>:指/sdcard实际上指向/data分区的一个目录,两者在物理上共享存储空间。</p>    <p><strong>SD卡</strong>:指物理可移除的那个小存储卡片</p>    <p>安卓对SD卡的支持:</p>    <p>安卓2.1及之前的版本,不支持合并存储,SD卡作为外部存储,应用只能安装到内部存储。</p>    <p>安卓2.2起,不支持合并存储,SD卡作为外部存储,考虑到一些机型的内部存储比较小,所以增加了安装/移动应用到外部存储的功能。</p>    <p>安卓3.0起,支持并推荐使用合并存储方案。不采用合并存储方案的机型,仍然可以沿用之前版本的方案(参见上一条目)。对于采用了合并存储方案的机型,安装一个应用到外部存储等同于安装它到内部存储(所以界面上就没有"移动到外部存储/内部存储"选项了),手机仍然可以配备SD卡,但SD卡对于第三方应用来说是只读的,仅媒体文件可以通过MediaProvider暴露给用户和应用读取。</p>    <p>安卓4.4起,采用合并存储方案的机型,可以配备SD卡,第三方应用程序可以通过公开的API读写自己在SD卡上的私有数据区(类似于/data/data/[package name]或/sdcard/Android/data/[package name]的私有数据区),也可以通过公开的API读取SD上的其它文件。</p>    <p>可以看出安卓对SD卡的支持是在逐步加强的,而产生“安卓4.4限制SD卡”这个误解的根源是在安卓4.4之前有很多手机厂商为了同时支持外部存储和SD卡改写了安卓系统,赋予了第三方应用完全读写SD卡的权限,到安卓4.4时,这些厂商又不得不遵守谷歌的要求关闭了这个权限。</p>    <p>需要说明的是,在安卓4.4里,系统应用(指有platform签名,或预装在/system/priv-app目录下的应用)可以通过使用 <strong>WRITE_MEDIA_STORAGE</strong> 权限获取完全读写SD卡的权限。</p>    <p>补充:为了保证读写SD卡的遗留应用(legacy applications)能正常工作,有些厂商会无视安卓4.4的原始设计,通过修改分组策略在安卓4.4上也赋予使用WRITE_EXTERNAL_STORAGE权限的程序完全读写SD卡的权限。</p>    <p><strong>Android 5.0</strong> 不能通过 <strong>流的形式</strong> 直接往外置SDCard目标路径url里面写入数据了,必须通过support.v4.provider.DocumentFile来实现,可以通过发送 Intent.ACTION_OPEN_DOCUMENT_TREE,动态授予SDCard目录树的读写权限。</p>    <p><strong>Android 6.0 </strong> 还需要先申请外置SDCard读写权限。 在Android6.0中,第三方应用不再被加入sdcard_r和sdcard_rw组中。相反,通过给应用挂载合适的运行时视图,实现对外部存储的访问控制.</p>    <p> </p>    <p>来自:http://www.cnblogs.com/changjl/p/6143283.html</p>    <p> </p>    
 本文由用户 evjx0109 自行上传分享,仅供网友学习交流。所有权归原作者,若您的权利被侵害,请联系管理员。
 转载本站原创文章,请注明出处,并保留原始链接、图片水印。
 本站是一个以用户分享为主的开源技术平台,欢迎各类分享!
 本文地址:https://www.open-open.com/lib/view/open1481163476386.html
移动应用 Android开发 移动开发