在API 33(Android 13)中,引入了粒度媒体权限,开发者必须请求这些粒度权限而不是
READ_EXTERNAL_STORAGE
。
READ_MEDIA_AUDIO
就是这样一种精细的权限。此权限仅存在于 API 级别 33+,所以我的问题是,我应该在 manifest 中请求哪个权限?
因为我的应用程序有
minSDK = 21
,我是否应该在清单中同时请求READ_EXTERNAL_STORAGE
和READ_MEDIA_AUDIO
。或者我应该只要求 READ_EXTERNAL_STORAGE
而这将涵盖 READ_MEDIA_AUDIO
? (当然,在运行时,我会根据设备的SDK_INT
请求任何一个权限。)
您应该将这两种权限都添加到您的清单中
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO"/>
READ_MEDIA_AUDIO
权限仅适用于 Android 13 或更高版本的设备。
然后,如你所写,你应该处理SDK的每一个case(这部分可能对其他开发者有帮助):
READ_EXTERNAL_STORAGE
权限的运行时权限(https://developer.android.com/training/permissions/requesting)READ_EXTERNAL_STORAGE
权限下载音频文件。关于更改,例如目录 Recordings
仅存在于 SDK 31(来源:https://developer.android.com/training/data-storage/shared/media#media_store)READ_MEDIA_AUDIO
除了建议的内容之外,如果您只是在学习并且不知道如何请求权限并且不想弄乱它,那么只需执行以下操作:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
P。 S. 这对我有用。