API 28下拒绝存储权限仍能写入外部存储的原因?
为什么拒绝存储权限后仍能在API28写入外部存储?
你遇到的情况完全符合Android的设计规则,核心原因在于你操作的是应用专属的外部存储目录,这类目录的读写根本不需要申请READ_EXTERNAL_STORAGE或WRITE_EXTERNAL_STORAGE权限——不管是API28还是更早的版本都是如此。
具体细节:
getExternalFilesDir(null)返回的路径是/sdcard/Android/data/[你的应用包名]/files/,属于应用的私有外部存储区域,系统默认允许应用直接读写自己的专属目录,不需要任何存储权限。- 你Manifest里配置的
WRITE_EXTERNAL_STORAGE权限,是针对公共外部存储区域(比如根目录、Downloads、Pictures这类所有应用都能访问的目录)的。只有当你要读写这些公共区域时,才需要申请并获得权限,拒绝权限后操作才会失败。 - 这个规则是Android的通用设计,和模拟器/真机无关,所以你在Firebase测试实验室的API28真机上测试也会得到同样的结果。
如果想验证权限控制的效果,你可以尝试写入公共外部存储目录(比如Environment.getExternalStorageDirectory()下的文件),这时候拒绝存储权限的话,写入操作就会因为权限不足而失败了。
内容的提问来源于stack exchange,提问作者Ashish Joshi
相关产品推荐
相关产品推荐

