Android 10(API 级别 29)及更高版本会限制应用何时可以启动 activity 背景。这些限制有助于最大限度地减少对用户的干扰, 让用户能够更好地控制其屏幕上显示的内容
本指南介绍了从以下位置启动 activity 的备选通知: 背景。还列出了限制不具有限制的 。
改为显示通知
几乎在所有情况下,后台应用都必须 显示有时效性的通知 向用户提供紧急信息,而不是直接启动 activity。 此类通知包括处理来电或正在进行的闹钟 时钟。
这种基于通知的提醒系统具有多种优势, 用户:
- 在使用设备时,用户会看到浮动通知 。用户可维护其当前上下文并控制 看到的内容
- 具有时效性的通知会尊重用户的 勿扰规则。对于 例如,用户可能只允许特定联系人或重复来电 在启用了“请勿打扰”的情况下显示来电者。
- 当设备屏幕关闭时,会启动全屏 intent 。
- 在设备的设置屏幕中,用户可以查看哪些应用 最近发送的通知,包括来自特定通知渠道的通知。 在该屏幕中,用户可以控制其通知偏好设置。
应用何时可以启动 activity
在 Android 10 或更高版本上运行的应用可以在以下情况下启动 activity: 满足以下一个或多个条件:
<ph type="x-smartling-placeholder"></ph>
- 该应用具有可见窗口,例如在前台运行的 Activity。
- 应用在 返回堆栈 一个前台任务。
应用在 “最近使用的应用”屏幕。
该应用具有最近启动的 activity。
名为
finish()
的应用 最近的一项活动这仅适用于应用具有 位于前台的 activity 或 前台任务(调用finish()
时)。应用具有以下受系统绑定的服务之一。这些 服务可能需要启动界面。
AccessibilityService
AutofillService
CallRedirectionService
HostApduService
InCallService
TileService
(不适用于 Android 14 [API 级别 34] 及更高版本)VoiceInteractionService
VrListenerService
。
该应用的某项服务受其他可见应用绑定。应用 绑定到服务的必须始终对后台应用可见 成功启动 activity。
<ph type="x-smartling-placeholder"></ph>
应用收到通知
PendingIntent
。在 服务和广播接收器的待定 intent 一样, 可以在发送待处理 intent 几秒钟后启动 activity。应用收到一个从其他可见视图发出的
PendingIntent
, 应用。应用收到系统广播,并在其中启动 界面。例如
ACTION_NEW_OUTGOING_CALL
和SECRET_CODE_ACTION
. 应用可在广播发送几秒钟后启动 Activity。应用通过
CompanionDeviceManager
API.此 API 允许应用启动 activity 来响应 用户在配对设备上执行的操作。应用由用户授予
SYSTEM_ALERT_WINDOW
权限。
从 PendingIntent 启动 activity 时需要选择启用
为了避免允许意外的 Activity 启动(根据列出的 条件,从 Android 14 开始,有显式 API 允许您 选择启用或停用向应用授予 activity 启动权限的权限。
以 Android 15 或更高版本为目标平台的应用将默认不再隐式执行此操作
向 PendingIntents
授予后台活动启动 (BAL) 权限
创建。必须明确选择启用,为此,您可以选择以下选项
具体取决于应用是发送还是创建 PendingIntents
。
由 PendingIntent 的发送器
以 Android 14 或更高版本为目标平台的应用若想启动 PendingIntent
,必须
- 满足列出的条件 并且
- 选择允许基于这些异常启动后台活动
只有应用开发者知道相应应用 启动一个 Activity 的方法
如需选择启用,应用应传递包含以下内容的 ActivityOptions
bundle
setPendingIntentBackgroundActivityStartMode(ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED)
PendingIntent.send()
或类似方法。
由 PendingIntent 的创建者提供
以 Android 15 或更高版本为目标平台且创建 PendingIntent
的应用现在必须
明确选择启用后台 activity 启动(如果用户需要这些)
PendingIntents
能够在列出的条件下启动。
在大多数情况下,启动 PendingIntent
的应用应该是要选择启用的应用。
但是,如果创建的应用需要授予以下权限:
- 可以在创建应用时随时启动
PendingIntent
。 - 如果创建的应用具有特殊的 API,则可以随时启动
PendingIntent
权限。
如需选择启用,应用应传递包含以下内容的 ActivityOptions
bundle
setPendingIntentCreatorBackgroundActivityStartMode
(ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED)
至
PendingIntent.getActivity()
或类似方法。
如需了解详情,请参阅相关参考文档:
ActivityOptions.setPendingIntentBackgroundActivityStartMode
ActivityOptions.setPendingIntentCreatorBackgroundActivityStartMode