バックグラウンドからのアクティビティの起動に関する制限

Android 10(API レベル 29)以降では、アプリを起動できるタイミングに制限が設けられています アクティビティの一覧を できます。この制限により、ユーザーへの影響を最小限に抑えることができ、 画面に表示される内容をユーザーが細かく制御できるようにします。

このガイドでは、アクティビティの起動に関する代替手段として、 できます。また、制限が適用されない具体的なケースも記載されています。 適用されます。

代わりに通知を表示する

ほとんどの場合、バックグラウンドのアプリは 時間的制約のある通知を表示して アクティビティを直接開始するのではなく、ユーザーに緊急の情報を提供する。 このような通知には、着信やアクティブなアラームの処理などが含まれます 表示されます。

この通知ベースのアラートおよびリマインダー システムには、 ユーザー向け:

  • デバイスの使用中にヘッドアップ通知が表示され、 できます。ユーザーは現在のコンテキストを維持し、 画面上のコンテンツにも影響します
  • 時間的制約のある通知は、ユーザーの サイレント モード ルール。対象 たとえば、特定の連絡先からの発信のみ、または同一発信者による再着信のみを許可できます。 着信があると通知があります。
  • デバイスの画面がオフのときに、全画面インテントが起動します。 すぐに通知されます。
  • デバイスの [設定] 画面で、 最近送信された通知(特定の通知チャンネルからの通知を含む) この画面から、ユーザーは通知設定を管理できます。

アプリがアクティビティを開始できるタイミング

Android 10 以降で動作するアプリは、次の場合にアクティビティを開始できます。 次の条件が 1 つ以上満たされます。

<ph type="x-smartling-placeholder">
</ph>
  • フォアグラウンドにあるアクティビティなど、アプリが可視ウィンドウを持っている場合。
  • アプリのアクティビティが バックスタック フォアグラウンド タスクを実行します。
  • アプリのアクティビティが 履歴画面

  • 最近開始したアクティビティがある。

  • このアプリは finish() を呼び出しています。 アクティビティです。これは、アプリに バックスタック内のアクティビティか、 finish() が呼び出された時点のフォアグラウンド タスク。

  • アプリには、システムによってバインドされた次のいずれかのサービスがあります。これらの サービスで UI の起動が必要になる場合があります。

  • 別の可視アプリによってバインドされたサービスがある。アプリ そのサービスにバインドされたリクエストをバックグラウンドで アクティビティを起動できます。

    <ph type="x-smartling-placeholder">
    </ph>
  • アプリが通知を受信する システムの PendingIntent。イン サービスおよびブロードキャスト レシーバのペンディング インテントの場合、 ペンディング インテントの送信後、数秒間はアクティビティを開始できます。

  • アプリが、別の可視システムから送信された PendingIntent を受信した場合 。

  • アプリが、アプリの起動が予定されているシステム ブロードキャストを受信します。 UI です。たとえば、ACTION_NEW_OUTGOING_CALLSECRET_CODE_ACTION. アプリは、ブロードキャストの送信後、数秒間はアクティビティを開始できます。

  • アプリがコンパニオン ハードウェア デバイスに関連付けられている場合、 CompanionDeviceManager APIこの API を使用すると、アプリによって実行されたアクションに応じて、 ペア設定したデバイスでユーザーが行った操作。

  • アプリが Device Policy Controller で実行されている デバイス所有者モード。ユースケースの例 フルマネージドのエンタープライズ デバイス デジタル デバイスなどの専用デバイス サポートしています

  • ユーザーがアプリに SYSTEM_ALERT_WINDOW 権限を付与している。

PendingIntent からアクティビティを起動する場合はオプトインが必要

意図しないアクティビティがリストされている Android 14 以降では、明示的な API を使用して、 アクティビティの開始に対するアプリ権限の付与を有効または無効にできます。

Android 15 以降をターゲットとするアプリで、デフォルトで暗黙的に PendingIntents にバックグラウンド アクティビティの起動(BAL)権限を付与する 作成します。明示的なオプトインが必要です。以下のオプションがあります。 アプリが PendingIntents を送信または作成しているかどうかによって異なります。

<ph type="x-smartling-placeholder">
</ph> ペンディング インテントの表
図 1: バックグラウンド アクティビティの起動に関する決定フロー

PendingIntent の送信者

Android 14 以降をターゲットとするアプリで PendingIntent を開始する場合、手順は次のとおりです。

  • リストにある条件 を満たす
  • そうした例外に基づいてバックグラウンド アクティビティの起動を許可する

このオプトインは、アプリが アクティビティを開始できます。

オプトインするには、アプリで ActivityOptions バンドルを渡す必要があります。 setPendingIntentBackgroundActivityStartMode(ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED) PendingIntent.send() または同様のメソッドに追加します。

PendingIntent の作成者

Android 15 以降をターゲットとするアプリで、PendingIntent を作成することが必須になりました バックグラウンド アクティビティの起動を許可する場合は、明示的にオプトインする PendingIntents は、リストされた条件で開始可能にします。

ほとんどの場合、PendingIntent を起動するアプリでオプトインする必要があります。 ただし、作成元のアプリでこれらの権限を付与する必要がある場合は、次のようにします。

  • PendingIntent は、作成中のアプリが表示されているときにいつでも開始できます。
  • PendingIntent は、作成元のアプリに特別な できます。

オプトインするには、アプリで ActivityOptions バンドルを渡す必要があります。 setPendingIntentCreatorBackgroundActivityStartMode (ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED)PendingIntent.getActivity() または同様のメソッドを使用します。

詳細については、関連するリファレンス ドキュメントをご覧ください。