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 vonfinish()
.Die App hat einen der folgenden Dienste, der an das System gebunden ist. Diese müssen Sie möglicherweise eine UI starten.
AccessibilityService
AutofillService
CallRedirectionService
HostApduService
InCallService
TileService
(gilt nicht für Android 14 (API-Level 34) und höher)VoiceInteractionService
VrListenerService
.
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, sichtbarenDie App erhält eine Systemnachricht, in der sie voraussichtlich einen UI. Beispiele hierfür sind
ACTION_NEW_OUTGOING_CALL
undSECRET_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.
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:
ActivityOptions.setPendingIntentBackgroundActivityStartMode
ActivityOptions.setPendingIntentCreatorBackgroundActivityStartMode