在我的Android应用程序中,我将一些文件保存到Environment.getExternalStorageDirectory() + "\MyApp"
目录。这工作正常,直到android 6 marshmallow更新。棉花糖更新后,我无法写入此目录。
正如this回答中所述,在marshmallow中,应用程序需要在写入外部存储之前在运行时请求用户的许可。
但是,当我使用context.getExternalFilesDir(null)
而不是Environment.getExternalStorageDirectory()
时,我不需要在运行时请求任何权限,它只是工作(从context.getExternalFilesDir(null)
返回的路径也在外部存储目录)。
这有点巧合还是我可以在没有得到运行许可的情况下继续写context.getExternalFilesDir(null)
?
答案 0 :(得分:9)
从KITKAT开始,无需读取或写入任何权限 返回的路径;它总是可以访问调用应用程序。这个 仅适用于为调用的包名生成的路径 应用。要访问属于其他包的路径, 需要WRITE_EXTERNAL_STORAGE和/或READ_EXTERNAL_STORAGE。
您将拥有Android 4.4及getExternalFilesDir()
的读/写权限,无需任何权限。
如果您需要支持较低的API级别,我建议您使用FileProvider。
答案 1 :(得分:0)
据我所知,自Android 6及以上版本开始提供PERMISSIONS 因此无需检查API 16的权限
答案 2 :(得分:0)
<uses-permission
android:maxSdkVersion="18"
android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>