为啥 Android 4.4 KitKat 限制第三方应用的 SD 卡读写权限

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥 Android 4.4 KitKat 限制第三方应用的 SD 卡读写权限相关的知识,希望对你有一定的参考价值。

android 4.4 开始限制第三方应用对外置存储卡(一般为外置可插拔TF卡)的读写权限,要申请到这个权限需要申请 WRITE_MEDIA_STORAGE 权限,而这个权限是需要系统签名才能生效的.
不过有些手机厂家会放开这个权限,使得应用申请了 WRITE_EXTERNAL_STORAGE 就可以访问外置存储卡 (相当于和4.4前一样了),这也是为了兼容之前应用做的折中.这么做的厂家也在逐渐减少.

限制读写外置存储卡,自然是为了类似用户隐私这类的需求考虑的.
比如,每个应用都在里面写东西,外置存储卡目录就会很乱.而作为可插拔卡,用户是会将此卡挂载到其他设备上的(比如PC),这时候用户就会面对的是一大堆不知所然的目录.

其实外置存储卡在4.4后还是可以读写的,只是Android对其做了限制.
第三方应用读写外置存储卡,仅限 Android/data/<Package.Name> 这一个目录(和内置存储卡对应目录一样),且读写这个目录不需要申请任何权限,可以试一下.
外置存储卡路径的获取需要一些特殊办法,这里就不展开了,需要请追问.
参考技术A Google 给出的理由有一定的道理——相信很多有洁癖的人都很讨厌第三方应用在 SD 卡或者内置存储下随意建立文件夹吧,有节操的应用应该只在以自己的包名区分的目录下存放需要的文件。

至于为什么只限制 SD 卡,不包括内置存储,个人觉得是因为 SD
卡是可以插在别的地方的,目录结构是有可能暴露出来的,也有可能被修改。规范应用在 SD 卡的读写,可以使得这个 SD
卡上的目录和文件可以在其他设备上被电脑「理解」——「这个目录是在某一个 Android 设备上用到的,不必理会它」,如果第三方应用随意在 SD
卡根目录创建命名不规范并且无规律的目录,这个 SD
卡在其他地方就会使电脑或者人迷惑——「这个目录是干什么的?是谁创建的?可不可以删掉它?」。手机的内部存储空间不能拆卸,所以其目录结构不会轻易暴
露给用户,也不会放在别的设备上,所以可以暂时不管。

以上是关于为啥 Android 4.4 KitKat 限制第三方应用的 SD 卡读写权限的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Android 4.4 Kitkat 系统并没有预装 stock browser 浏览器

Android 4.4系统 KitKat到底都有哪些能耐

透明状态栏 - Android 4.4 (KitKat) 之前

Android 4.4 KitKat 随机崩溃

无法在 Android 4.4 KitKat 上快速关闭 ChunkedInputStream

android webview中的HTML文件输入(android 4.4,kitkat)