细化的媒体权限
从Android 13开始,以Android13(API 33+)为目标平台的应用,系统新增运行时权限READ_MEDIA_IMAGES、READ_MEDIA_VIDEO、READ_MEDIA_AUDIO 替代原有的READ_EXTERNAL_STORAGE权限。
如果用户之前向您的应用授予了 READ_EXTERNAL_STORAGE 权限,系统会自动向您的应用授予细化的媒体权限。否则,当应用请求上表中显示的任何权限时,系统会显示面向用户的对话框。应用请求 READ_MEDIA_AUDIO 权限。
如果您同时请求 READ_MEDIA_IMAGES 权限和 READ_MEDIA_VIDEO 权限,系统只会显示一个系统权限对话框。
注意:如果您的应用只需要访问图片、照片和视频,请考虑使用照片选择器,而不是声明 READ_MEDIA_IMAGES 和 READ_MEDIA_VIDEO 权限。
<manifest ...>
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="32" />
</manifest>复制
新增通知运行时权限
Android 13 中引入了新的运行时权限,用于从应用发送非豁免通知:POST_NOTIFICATIONS。此更改有助于用户专注于最重要的通知。
强烈建议您尽快以 Android 13 为目标平台,以获享此功能提供的额外控制和灵活性。如果您继续以 12L(API 级别 32)或更低版本为目标平台,您将失去在应用功能环境中请求权限的机会。
如需向应用请求新的通知权限,请将应用更新为以 Android 13 为目标平台,并完成与请求其他运行时权限类似的流程,如以下几个部分所述。需要在应用的清单文件中声明的权限会显示在以下代码段中:
<manifest ...>
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
<application ...>
...
</application>
</manifest>
针对附近 Wi-Fi 设备的新运行时权限
在以前的 Android 版本中,用户需要向您的应用授予 ACCESS_FINE_LOCATION 权限,应用才能完成一些常见的 Wi-Fi 用例。
由于用户很难将位置信息权限与 Wi-Fi 功能相关联,因此 Android 13(API 级别 33)在 NEARBY_DEVICES 权限组中引入了运行时权限,适用于管理设备与附近 Wi-Fi 接入点连接情况的应用。此权限 (NEARBY_WIFI_DEVICES) 可满足以下 Wi-Fi 用例:
查找或连接到附近的设备,如打印机或媒体投射设备。通过该工作流,您的应用可以完成以下类型的任务:
通过带外方式(例如通过 BLE)接收 AP 信息。
使用仅限本地使用的热点,通过 Wi-Fi 感知和连接功能发现并连接到设备。
通过 Wi-Fi 直连发现和连接到设备。
发起与已知 SSID(例如汽车或智能家居设备)的连接。
开启仅限本地使用的热点。
连接到附近的 Wi-Fi 感知设备。
只要您的应用不会通过 Wi-Fi API 推导物理位置,那么当您以 Android 13 或更高版本为目标平台并使用 Wi-Fi API 时,就可以请求 NEARBY_WIFI_DEVICES 而不是 ACCESS_FINE_LOCATION。当您声明 NEARBY_WIFI_DEVICES 权限时,请强烈断言您的应用绝不会通过 Wi-Fi API 推导物理位置信息。为此,请将 android:usesPermissionFlags 属性设置为 neverForLocation。此过程类似于您在 Android 12(API 级别 31)及更高版本中声明绝不会将蓝牙设备信息用于获取位置信息的过程。
精确闹钟的新权限
如果升级到 Android 13,可以使用自动授予应用的 USE_EXACT_ALARM 权限。不过,一般是系统应用才可以使用,因为即将推出的 Google Play 政策会阻止应用使用 USE_EXACT_ALARM 权限,除非应用为日历或者时钟这样的系统应用 (国内另说)。
如果应用设置了精确闹钟,但又不是系统日历或时钟的话,还是继续声明 SCHEDULE_EXACT_ALARM 权限,并要为用户拒绝授予应用相应访问权限的情况做好准备。