【问题标题】:Do I need runtime permission check to write into getExternalFilesDir() path in marshmallow?我是否需要运行时权限检查才能写入棉花糖中的 getExternalFilesDir() 路径?
【发布时间】:2018-12-17 23:53:48
【问题描述】:

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

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

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

这是某种巧合,还是我可以继续写信给context.getExternalFilesDir(null),而无需在运行时请求许可?

【问题讨论】:

  • 您真的能够在 Android 6 上无需请求权限就将文件写入外部存储吗?

标签: android


【解决方案1】:

documentation 声明:

从 KITKAT 开始,无需读取或写入权限 返回的路径;调用应用程序始终可以访问它。这个 仅适用于为调用的包名生成的路径 应用。要访问属于其他包的路径, WRITE_EXTERNAL_STORAGE 和/或 READ_EXTERNAL_STORAGE 是必需的。

您无需任何权限即可在 Android 4.4+ 上对 getExternalFilesDir() 进行读/写访问。

如果您需要支持较低的 API 级别,我建议您使用 FileProvider

【讨论】:

  • 如果我的目标是 API 25,但支持到 API 16,我是否还需要在 Manifest 中声明 WRITE_EXTERNAL_STORAGE 权限,然后在运行时不请求权限?
【解决方案2】:
<uses-permission
android:maxSdkVersion="18"
android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

参考:uses-permission-element

【讨论】:

  • 我测试了两台 Android 5.1 的设备。未经许可他们不会工作,因此将 maxSdkVersion 更改为 22。
【解决方案3】:

据我所知,PERMISSIONS 是从 Android 6 及更高版本开始提供的 因此无需检查 API 16 的权限

【讨论】:

    猜你喜欢
    • 2017-05-12
    • 1970-01-01
    • 1970-01-01
    • 2016-11-19
    • 1970-01-01
    • 1970-01-01
    • 2016-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多