Android 13 - READ_EXTERNAL_STORAGE_PERMISSION 仍然可用

问题描述 投票:0回答:3

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 权限。

android android-permissions android-13
3个回答
39
投票

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

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

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

READ_EXTERNAL_STORAGE
权限,低于android 10。

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

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

关于

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

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

这取决于你的应用程序需要做什么,但我已经从我的应用程序中删除了所有类型的存储权限(仅

WRITE_EXTERNAL_STORAGE
留给SDK小于29),并且只需使用ACTION_OPEN_DOCUMENT,
ACTION_OPEN_DOCUMENT_TREE
即可访问所有类型文件(但不适用于系统文件夹,
ACTION_OPEN_DOCUMENT_TREE
也无权访问下载文件夹)。


12
投票
On Android 13 the READ_EXTERNAL_STORAGE has been replace 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"/>

0
投票

在 Android 13 上,READ_EXTERNAL_STORAGE 已被 READ_MEDIA_IMAGES 和 READ_MEDIA_VIDEO 取代。

在AndroidManifest.xml中

<uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO"/>

在你的java文件中:

String[] permissions = new String[]{
    Manifest.permission.READ_MEDIA_VIDEO,
    Manifest.permission.READ_MEDIA_IMAGES,
    Manifest.permission.CAMERA
 };
© www.soinside.com 2019 - 2024. All rights reserved.