Einschränkungen für das Starten von Aktivitäten im Hintergrund

Android 10 (API-Level 29) und höher schränken den Start von Apps ein Aktivitäten, wenn die App ausgeführt wird. im Hintergrund. Mit diesen Einschränkungen lassen sich Unterbrechungen für Nutzer und Der Nutzer kann besser kontrollieren, was auf seinem Bildschirm angezeigt wird.

In diesem Leitfaden werden Benachrichtigungen als Alternative zum Beginn von Aktivitäten aus im Hintergrund. Es werden auch spezifische Fälle aufgeführt, in denen angewendet werden.

Stattdessen Benachrichtigungen anzeigen

In fast allen Fällen müssen Apps im Hintergrund zeitkritische Mitteilungen anzeigen, um dem Nutzer dringende Informationen zur Verfügung stellen, anstatt eine Aktivität direkt zu starten. Solche Benachrichtigungen sind z. B. der Umgang mit einem eingehenden Anruf oder einem aktiven Wecker. Uhr.

Dieses benachrichtigenbasierte Alarm- und Erinnerungssystem bietet mehrere Vorteile. für Nutzer:

  • Wenn der Nutzer das Gerät verwendet, erhält er eine Vorabbenachrichtigung, antworten. Die Nutzenden behalten ihren aktuellen Kontext bei und haben Kontrolle über die Inhalte, die sie auf dem Bildschirm sehen.
  • Zeitkritische Benachrichtigungen berücksichtigen die Bitte nicht stören-Regeln. Für Beispielsweise können Nutzer Anrufe nur von bestimmten Kontakten oder von wiederholten wenn „Bitte nicht stören“ aktiviert ist.
  • Wenn der Bildschirm des Geräts ausgeschaltet ist, wird der Full-Screen Intent gestartet. sofort.
  • Auf dem Bildschirm Einstellungen des Geräts kann der Nutzer sehen, welche Apps kürzlich gesendete Benachrichtigungen, auch von bestimmten Benachrichtigungskanälen Auf diesem Bildschirm kann der Nutzer seine Benachrichtigungseinstellungen festlegen.

Wann Apps Aktivitäten starten können

Apps mit Android 10 oder höher können Aktivitäten starten, wenn eine oder mehrere der folgenden Bedingungen erfüllt sind:

<ph type="x-smartling-placeholder">
</ph>
  • Die App hat ein sichtbares Fenster, z. B. eine Aktivität im Vordergrund.
  • Die App hat eine Aktivität im Back Stack von die Aufgabe im Vordergrund.
  • Die App hat eine Aktivität im Back-Stack einer vorhandenen Aufgabe im Bildschirm „Letzte Apps“:

  • Die App hat eine Aktivität, die erst vor Kurzem begonnen hat.

  • Die App finish() auf sehr kürzlich eine Aktivität. Dies gilt nur, wenn die App entweder eine eine Aktivität im Vordergrund oder eine Aktivität im Back-Stack der Vordergrundaufgabe zum Zeitpunkt des Aufrufs von finish().

  • Die App hat einen der folgenden Dienste, der an das System gebunden ist. Diese müssen Sie möglicherweise eine UI starten.

  • Die Anwendung hat einen Dienst, der an eine andere, sichtbare Anwendung gebunden ist. Die App muss für die App im Hintergrund sichtbar bleiben, damit Aktivitäten erfolgreich gestartet werden.

    <ph type="x-smartling-placeholder">
    </ph>
  • Die App erhält eine Benachrichtigung PendingIntent aus dem System. In Bei ausstehenden Intents für Dienste und Übertragungsempfänger nach dem Senden des ausstehenden Intents für einige Sekunden Aktivitäten starten können.

  • Die App empfängt eine PendingIntent, die von einer anderen, sichtbaren

  • Die App erhält eine Systemnachricht, in der sie voraussichtlich einen UI. Beispiele hierfür sind ACTION_NEW_OUTGOING_CALL und SECRET_CODE_ACTION. Die App kann nach dem Senden der Übertragung für einige Sekunden Aktivitäten starten.

  • Die App ist über die CompanionDeviceManager API. Mit dieser API kann die App Aktivitäten als Reaktion auf Aktionen starten, die der die der Nutzer auf einem gekoppelten Gerät ausführt.

  • Die App ist ein Device Policy Controller, der ausgeführt wird in Modus „Geräteeigentümer“ aktivieren oder deaktivieren. Beispiele für Anwendungsfälle: vollständig verwaltete Geräte für Unternehmen sowie spezielle Geräte wie digitale digitale Beschilderung und Kioske.

  • Der Nutzer hat der App die Berechtigung SYSTEM_ALERT_WINDOW gewährt.

Opt-in erforderlich, wenn Aktivitäten aus PendingIntents gestartet werden

Um zu vermeiden, dass versehentliche Aktivitäten auf Grundlage der aufgeführten Ab Android 14 gibt es explizite APIs, mit denen Sie können Sie App-Berechtigungen für Aktivitätsstarts aktivieren oder deaktivieren.

Apps, die auf Android 15 oder höher ausgerichtet sind, werden standardmäßig nicht mehr implizit verwendet. PendingIntents die Berechtigung zum Starten von Hintergrundaktivitäten (BAL) gewähren erstellen. Dazu ist eine ausdrückliche Zustimmung erforderlich. je nachdem, ob die App PendingIntents sendet oder erstellt.

<ph type="x-smartling-placeholder">
</ph> Tabelle mit ausstehenden Intents
Abbildung 1: Entscheidungsablauf beim Starten von Hintergrundaktivitäten

Vom Sender des PendingIntent

Apps, die auf Android 14 oder höher ausgerichtet sind und einen PendingIntent starten möchten, müssen

  • die aufgeführten Bedingungen erfüllen und
  • Aktivieren, um den Start von Hintergrundaktivitäten auf Grundlage dieser Ausnahmen zuzulassen

Dieses Opt-in sollte nur erfolgen, wenn der App-Entwickler weiß, dass die App eine Aktivität zu starten.

Zum Aktivieren muss die App ein ActivityOptions-Bundle übergeben, das setPendingIntentBackgroundActivityStartMode(ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED) PendingIntent.send() oder ähnliche Methoden.

Vom Ersteller des PendingIntent

Apps, die auf Android 15 oder höher ausgerichtet sind und eine PendingIntent erstellen, müssen jetzt ausdrücklich aktivieren, dass Hintergrundaktivitäten gestartet werden, wenn diese PendingIntents, damit sie unter den aufgeführten Bedingungen gestartet werden können.

In den meisten Fällen sollte die App, die PendingIntent startet, aktiviert sein. Wenn die erstellende Anwendung diese Berechtigungen jedoch erteilen muss:

  • PendingIntent kann jederzeit gestartet werden, wenn die erstellte App sichtbar ist.
  • PendingIntent kann jederzeit gestartet werden, wenn die erstellte App spezielle Berechtigungen.

Zum Aktivieren muss die App ein ActivityOptions-Bundle übergeben, das setPendingIntentCreatorBackgroundActivityStartMode (ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED) in den PendingIntent.getActivity() oder ähnliche Methoden.

Weitere Informationen finden Sie in der entsprechenden Referenzdokumentation: