全屏 intent 限制

为了防范垃圾广告和凭据钓鱼式攻击,从 Android 14 开始,只能向提供通话和闹钟功能的应用授予用于发送全屏通知的默认 USE_FULL_SCREEN_INTENT 权限。

对于安装在 Android 14 中的所有应用,USE_FULL_SCREEN_INTENT 权限默认处于启用状态。安装后,Google Play 商店会撤消不具备通话或闹钟功能的应用的全屏 intent (FSI) 权限。

对于在搭载低于 Android 13 版本的手机上安装的应用,USE_FULL_SCREEN_INTENT 权限默认保持启用状态。

用户权限

在 Android 14 中,应用可以使用 NotificationManager#canUseFullScreenIntent() 检查自己能否发送全屏通知。为了获得发送全屏通知的用户权限,应用需要使用 ACTION_MANAGE_APP_USE_FULL_SCREEN_INTENT 启动管理全屏 intent 设置,如图 1 所示:

fsi-ui

图 1. 使应用能够发送全屏 intent 的界面。

管理全屏 intent 设置位于特殊应用访问权限下的设置菜单中。借助此界面,用户可以根据需要撤消此权限。

OEM 要求

在 Android 14 中,应用的 FSI 权限默认处于启用状态。原始设备制造商 (OEM) 必须指定哪些应用有资格获得 FSI 权限。OEM 必须确保第三方应用商店使用 PackageInstaller.SessionParams(特别是结合 PERMISSION_STATE_DEFAULTPERMISSION_STATE_DENIEDPERMISSION_STATE_GRANTED 参数)为其应用设置 FSI 权限的初始授权状态。

验证

您可以使用 NotificationFullScreenIntentVerifierActivity.java 中的 CTS 验证程序测试和 NotificationManagerTest.java 中的 CTS 测试来验证 FSI 限制。

手动测试

如需手动测试应用的 FSI 限制,请按以下步骤操作:

  1. 声明 USE_FULL_SCREEN_INTENT 添加到应用的 AndroidManifest.xml 文件中。
  2. 使用 ACTION_MANAGE_APP_USE_FULL_SCREEN_INTENT 管理用于开启或关闭 FSI 的设置。
  3. 在测试手机上,手动切换用户对于全屏通知的权限,如图 1 所示。
  4. 发送 FSI 通知。
  5. 针对以下 FSI 权限和显示模式组合,验证全屏通知的外观:
FSI 权限 已解锁屏幕 已锁定屏幕 屏幕外 屏幕常亮 (AOD)
由用户授予 带药丸按钮的常驻浮动通知 (HUN) 启动 FSI 启动 FSI 启动 FSI
被用户拒绝 带药丸按钮 HUN 显示 60 秒 带药丸按钮的 HUN 会在列表中优先显示 60 秒 AOD 处于开启状态,显示 60 秒带药丸按钮的 HUN 带药丸按钮 HUN 显示 60 秒