Android 13 - 如何请求 WRITE_EXTERNAL_STORAGE

Roh*_*hit 80 android android-manifest android-permissions runtime-permissions android-13

我的 Android 应用程序的目标版本是 Android 13 (API 33)

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#capsular-media-permissions

use*_*940 76

TLDR:你不知道。

来自谷歌的官方文档

“如果您的应用以 Android 11 为目标平台,则 WRITE_EXTERNAL_STORAGE 权限和 WRITE_MEDIA_STORAGE 特权权限将不再提供任何额外访问权限。”

因此,实际上,如果您在 Android 11 或更高版本上请求 WRITE_EXTERNAL_STORAGE,您将不会请求任何内容。这就是 Android 迁移到范围存储的全部要点,它有效地防止应用程序读取或写入其他应用程序的存储目录,除非它们正在访问特定的文件类型(例如媒体,使用您提到的权限)或被授予特殊的文件管理器Google 自己的权限。有关范围存储的更多信息,请参阅这篇写得很好的文章,但 TLDR 安全性和应用程序卸载的剩余文件是 Google 这样做的主要原因。

因此,如果您确实想写入文件,请确保仅写入应用程序的指定存储目录,在这种情况下,您根本不需要任何权限,或者如果您确实需要写入应用程序不需要的目录没有从 Google 获得文件管理器权限(如何获得该权限

  • 只是补充一下,如果您尝试在 Android 13+ 上检查或请求 WRITE_EXTERNAL_STORAGE,它将始终返回 false。因此,您必须在 Android 13+ 上完全跳过权限检查/请求。 (58认同)