我是否需要运行时权限检查以写入marshmallow中的getExternalFilesDir()路径?

时间:2015-12-26 07:27:36

标签: android

在我的Android应用程序中,我将一些文件保存到Environment.getExternalStorageDirectory() + "\MyApp"目录。这工作正常,直到android 6 marshmallow更新。棉花糖更新后,我无法写入此目录。

正如this回答中所述,在marshmallow中,应用程序需要在写入外部存储之前在运行时请求用户的许可。

但是,当我使用context.getExternalFilesDir(null)而不是Environment.getExternalStorageDirectory()时,我不需要在运行时请求任何权限,它只是工作(从context.getExternalFilesDir(null)返回的路径也在外部存储目录)。

这有点巧合还是我可以在没有得到运行许可的情况下继续写context.getExternalFilesDir(null)

3 个答案:

答案 0 :(得分:9)

documentation州:

  

从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"/>

参考:uses-permission-element