针对从后台启动 activity 的限制

Android 10(API 级别 29)及更高版本会限制应用何时可以启动 activity 背景。这些限制有助于最大限度地减少对用户的干扰, 让用户能够更好地控制其屏幕上显示的内容

本指南介绍了从以下位置启动 activity 的备选通知: 背景。还列出了限制不具有限制的 。

改为显示通知

几乎在所有情况下,后台应用都必须 显示有时效性的通知 向用户提供紧急信息,而不是直接启动 activity。 此类通知包括处理来电或正在进行的闹钟 时钟。

这种基于通知的提醒系统具有多种优势, 用户:

  • 在使用设备时,用户会看到浮动通知 。用户可维护其当前上下文并控制 看到的内容
  • 具有时效性的通知会尊重用户的 勿扰规则。对于 例如,用户可能只允许特定联系人或重复来电 在启用了“请勿打扰”的情况下显示来电者。
  • 当设备屏幕关闭时,会启动全屏 intent 。
  • 在设备的设置屏幕中,用户可以查看哪些应用 最近发送的通知,包括来自特定通知渠道的通知。 在该屏幕中,用户可以控制其通知偏好设置。

应用何时可以启动 activity

在 Android 10 或更高版本上运行的应用可以在以下情况下启动 activity: 满足以下一个或多个条件:

<ph type="x-smartling-placeholder">
</ph>
  • 该应用具有可见窗口,例如在前台运行的 Activity。
  • 应用在 返回堆栈 一个前台任务。
  • 应用在 “最近使用的应用”屏幕

  • 该应用具有最近启动的 activity。

  • 名为 finish() 的应用 最近的一项活动这仅适用于应用具有 位于前台的 activity 或 前台任务(调用 finish() 时)。

  • 应用具有以下受系统绑定的服务之一。这些 服务可能需要启动界面。

  • 该应用的某项服务受其他可见应用绑定。应用 绑定到服务的必须始终对后台应用可见 成功启动 activity。

    <ph type="x-smartling-placeholder">
    </ph>
  • 应用收到通知 PendingIntent。在 服务和广播接收器的待定 intent 一样, 可以在发送待处理 intent 几秒钟后启动 activity。

  • 应用收到一个从其他可见视图发出的 PendingIntent, 应用。

  • 应用收到系统广播,并在其中启动 界面。例如 ACTION_NEW_OUTGOING_CALLSECRET_CODE_ACTION. 应用可在广播发送几秒钟后启动 Activity。

  • 应用通过 CompanionDeviceManager API.此 API 允许应用启动 activity 来响应 用户在配对设备上执行的操作。

  • 该应用是运行在 设备所有者模式。应用场景示例包括 全托管式企业设备 以及数字设备等专用设备 标牌和自助服务终端

  • 应用由用户授予 SYSTEM_ALERT_WINDOW 权限。

从 PendingIntent 启动 activity 时需要选择启用

为了避免允许意外的 Activity 启动(根据列出的 条件,从 Android 14 开始,有显式 API 允许您 选择启用或停用向应用授予 activity 启动权限的权限。

以 Android 15 或更高版本为目标平台的应用将默认不再隐式执行此操作 向 PendingIntents 授予后台活动启动 (BAL) 权限 创建。必须明确选择启用,为此,您可以选择以下选项 具体取决于应用是发送还是创建 PendingIntents

<ph type="x-smartling-placeholder">
</ph> 待处理 intent 表
图 1:后台 activity 启动的决策流程。

由 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() 或类似方法。

如需了解详情,请参阅相关参考文档: