【问题标题】:Android 13 - How to request WRITE_EXTERNAL_STORAGEAndroid 13 - 如何请求 WRITE_EXTERNAL_STORAGE
【发布时间】:2022-11-03 07:53:26
【问题描述】:

我的目标是针对 Android 13 (API 33) 的 Android 应用

WRITE_EXTERNAL_STORAGE 权限似乎在 API 33 (即 Android 12 及更低版本)下运行良好,但在 Android 13 上运行应用程序时不会出现 WRITE_EXTERNAL_STORAGE 的运行时权限弹出窗口。

我的 Android 应用在应用的私有存储中创建了一个密钥库文件。

Android 13 的行为更改提到了这一点:

如果您的应用面向 Android 13,您必须请求一个或多个新的 权限而不是 READ_EXTERNAL_STORAGE。

新的权限是:

  • 图像和照片:READ_MEDIA_IMAGES
  • 视频:READ_MEDIA_VIDEO 音频
  • 音频文件:READ_MEDIA_AUDIO

我在官方文档中没有找到任何有关此的信息。 该文档只关注媒体文件,没有任何关于其他文件类型的信息。

https://developer.android.com/about/versions/13/behavior-changes-13#granular-media-permissions

【问题讨论】:

  • My Android app creates one keystore file in app's private storage. 为此不需要任何许可。
  • 最好阅读您的链接:If your app targets Android 13 or higher and needs to access media files that other apps have created, 因此,如果您想在外部存储上创建文件,您仍然应该请求写入外部存储权限。我不知道为什么没有更多的用户交互。但更重要的是:您是否获得外部存储的写访问权限(不是应用程序私有)?
  • 相同。所以我的应用程序出现了一个巨大的错误,因为创建文件的场景检查了权限并且用户无法进入下一步
  • 检查这个答案,因为它有一些优点:stackoverflow.com/a/73630987/8929068

标签: android android-manifest android-permissions runtime-permissions android-13


【解决方案1】:

TLDR:你没有。

来自谷歌的official documentation

“如果您的应用面向 Android 11,则 WRITE_EXTERNAL_STORAGE 权限和 WRITE_MEDIA_STORAGE 特权权限不再提供任何额外的访问权限。”

因此,实际上,如果您要在 Android 11 或更高版本上请求 WRITE_EXTERNAL_STORAGE,您将什么都不请求。这是 Android 迁移到范围存储的全部要点,它有效地防止应用读取或写入其他应用的存储目录,除非它们正在访问特定的文件类型(例如媒体,使用您提到的权限)或被授予特殊的文件管理器谷歌自己的权限。这个和更多上下文的历史原因可以在这个写得很好的article中找到,但是 TLDR 安全性和来自应用程序卸载的剩余文件。

所以如果你真的想写文件,要么确保你只写到你的应用程序的designated storage directories,在这种情况下你根本不需要任何权限,或者从谷歌获得文件管理器权限(how to get that permission

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-08
    • 2021-05-23
    • 2017-09-09
    • 2020-07-23
    • 2022-11-25
    • 2022-11-25
    • 2021-01-21
    • 1970-01-01
    相关资源
    最近更新 更多