您的位置:首页 > 移动开发 > Android开发

Android 4.4 KitKat限制第三方应用的SD卡读写权限,怎么解决?

2014-06-09 14:18 603 查看
安卓系统手机有一套自己的存储管理制度:几乎任何类型的存储设备都被称为“外部存储”(external storage),包括内部的NAND闪存,这个叫做“主要存储”(primary storage),而其他的一切都是“次要存储”(secondary storage),比如SD卡。

随着安卓系统的不断升级,第三方应用对存储的访问权限控制经过了多次调整,详细三说起来就复杂了,这里重点说最早、最常用的写入要求权限“WRITE_EXTERNAL_STORAGE”,它可以让应用写入主要存储(内置闪存),但不能写入次要存储(SD卡)。

安卓4.4里边,对于对所有外部存储,其上的文件属性都改为基于文件夹结构,应用无需获取WRITE_EXTERNAL_STORAGE权限,即可在外部存储上管理与自己包名相关的文件夹。举例来说,如果应用的包名是name com.example.foo,那么外部存储上的Android/data/com.example.foo/文件夹就是它的了,可随意访问。

另外需要特别注意的是,应用卸载的时候,在SD卡上创建的相应文件夹、数据都会被同时完全删除,所以如果有照片、文档等个人资料,应当避免这么做

应用程序在运行的过程中如果需要向手机上保存数据,一般是把数据保存在SDcard中的。

大部分应用是直接在SDCard的根目录下创建一个文件夹,然后把数据保存在该文件夹中。

这样当该应用被卸载后,这些数据还保留在SDCard中,留下了垃圾数据。

如果你想让你的应用被卸载后,与该应用相关的数据也清除掉,该怎么办呢?

通过Context.getExternalFilesDir()方法可以获取到 SDCard/Android/data/你的应用的包名/files/ 目录,一般放一些长时间保存的数据

通过Context.getExternalCacheDir()方法可以获取到 SDCard/Android/data/你的应用包名/cache/目录,一般存放临时缓存数据

如果使用上面的方法,当你的应用在被用户卸载后,SDCard/Android/data/你的应用的包名/ 这个目录下的所有文件都会被删除,不会留下垃圾信息。

而且上面二个目录分别对应 设置->应用->应用详情里面的”清除数据“与”清除缓存“选项
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: