Android 13 - READ_EXTERNAL_STORAGE_PERMISSION 仍然可用

Chr*_*her 73 android android-permissions android-13

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

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

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

新的权限是:

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

但是,如果我需要从任意文件夹读取 PDF 文件,该如何处理?没有像 READ_MEDIA_DOCUMENT 之类的权限。那么除图像、视频或音频之外的其他文件类型呢?我仍然可以对它们使用 READ_EXTERNAL_STORAGE 权限吗?

我在官方文档中没有找到有关此内容的任何信息,但说实话,该文档仅关注媒体文件,没有任何有关其他文件类型的信息(https://developer.android.com/about/versions/13/行为更改13#细粒度媒体权限)。

我也不确定除视频、图像和音频之外的其他文档类型的 WRITE_EXTERNAL_STORAGE 权限。

小智 50

根据文档(https://developer.android.com/training/data-storage/shared/media#storage-permission):

如果您仅访问自己的媒体文件,则无需任何权限在运行 Android 10 或更高版本的设备上,您不需要任何与存储相关的权限即可访问和修改应用拥有的媒体文件(包括媒体存储中的文件)。下载收藏。例如,如果您正在开发相机应用程序,则无需请求与存储相关的权限,因为您的应用程序拥有您正在写入媒体存储的图像。

从 Android 10 开始,您不能请求权限来从存储中获取文件。无需任何权限,即可与 Android 13 上我的应用程序上的各种文件(pdf、excel...)完美配合。所以你只需要请求READ_EXTERNAL_STORAGESDK的许可,低于android 10。

但如果您需要特殊文件(例如由 Instagram 应用程序创建但未存储在常用存储中的文件),您应该向您的列表请求许可。

另请查找媒体存储类型: https://developer.android.com/reference/android/provider/MediaStore

关于WRITE_EXTERNAL_STORAGE- 你不需要它,因为 sdkVersion=29

编辑:正在重写我的应用程序并想添加一些内容:

这取决于你的应用程序需要做什么,但我已经WRITE_EXTERNAL_STORAGE从我的应用程序中删除了所有类型的存储权限(仅保留小于29的SDK),并且仅使用ACTION_OPEN_DOCUMENT,ACTION_OPEN_DOCUMENT_TREE即可访问所有类型的文件(但不适用于系统)文件夹,ACTION_OPEN_DOCUMENT_TREE也无权访问下载文件夹)。

  • 如果没有下载文件夹,这没有多大帮助。我的应用程序适用于 PDF 文件和图像。我以前可以下载 PDF 或图像文件。然后点击它,然后“分享”。我的应用程序列在可共享应用程序中。这不再有效。其他可共享应用程序这样做必须能够访问下载文件夹。 (3认同)
  • 所以总而言之,如果我将“compileSdkVersion”设置为 33,即使我想访问我的应用程序文件,我仍然需要为 android 10 及更低版本获取 READ_EXTERNAL_STORAGE。只要我写入自己的应用程序文件,就不需要 WRITE_EXTERNAL_STORAGE 。我对吗? (2认同)
  • 是的。如果您将“compileSdkVersion”设置为 33,则您应该**仅**为 android 10 及更低版本获取 READ_EXTERNAL_STORAGE。否则,您的请求权限将始终失败。WRITE_EXTERNAL_STORAGE 也已被弃用,您应该将其从清单中删除。如果您需要访问非您的应用程序文件,则必须获得相关权限,例如视频的 READ_MEDIA_VIDEO。其他的在 android-permission 文档中列出。 (2认同)

nav*_*med 14

On Android 13 the READ_EXTERNAL_STORAGE has been replaced by READ_MEDIA_IMAGES and READ_MEDIA_VIDEO

<uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
Run Code Online (Sandbox Code Playgroud)

  • 那对我来说不起作用。API 33 不起作用。我使用 dexter 来获取运行时权限来读取图像 `&lt;uses-permission `android:name="android.permission.READ_MEDIA_IMAGES"/&gt;` 但在 Api33 中不起作用。 (3认同)