Android 10 (niveau d'API 29) ou version ultérieure impose des restrictions sur le moment où les applications peuvent démarrer activités lorsque l'application s'exécute en arrière-plan. Ces restrictions permettent de limiter les interruptions pour l'utilisateur et permettent à l'utilisateur de mieux contrôler ce qui s'affiche à l'écran.
Ce guide présente les notifications comme une alternative au démarrage d'activités en arrière-plan. Elle liste également les cas spécifiques où la restriction ne s'applique pas s'appliquent.
Afficher plutôt les notifications
Dans presque tous les cas, les applications en arrière-plan doivent afficher des notifications urgentes pour fournir des informations urgentes à l'utilisateur au lieu de démarrer directement une activité. Il peut s'agir, par exemple, de la gestion d'un appel téléphonique entrant ou d'une alarme active. l'horloge.
Ce système d'alerte et de rappel basé sur les notifications offre plusieurs avantages pour les utilisateurs:
- Lorsqu'il utilise l'appareil, l'utilisateur voit une notification prioritaire qui lui permet répondre. L'utilisateur conserve son contexte actuel et contrôle le le contenu qu'il voit à l'écran.
- Les notifications urgentes respectent les préférences de l'utilisateur Règles Ne pas déranger. Pour Par exemple, les utilisateurs peuvent n'autoriser que les appels provenant de contacts spécifiques ou les appels répétés appelants lorsque le mode Ne pas déranger est activé.
- Lorsque l'écran de l'appareil est éteint, l'intent plein écran est lancé immédiatement.
- Sur l'écran Paramètres de l'appareil, l'utilisateur peut voir les applications qui ont notifications envoyées récemment, y compris depuis des canaux de notification spécifiques. Depuis cet écran, l'utilisateur peut contrôler ses préférences de notification.
Quand les applis peuvent lancer des activités
Les applications exécutées sous Android 10 ou version ultérieure peuvent démarrer des activités lorsque : une ou plusieurs des conditions suivantes sont remplies:
<ph type="x-smartling-placeholder"></ph>
- L'application a une fenêtre visible, telle qu'une activité au premier plan.
- L'application a une activité dans le pile "Retour" de une tâche de premier plan.
L'application a une activité dans la pile "Retour" d'une tâche existante sur la Écran "Récents".
L'application présente une activité qui a commencé très récemment.
L'application appelée
finish()
sur une activité très récemment. Cela s'applique uniquement lorsque l'application dispose d'un une activité au premier plan ou dans la pile "Retour" tâche de premier plan au moment oùfinish()
a été appelé.L'application inclut l'un des services suivants, qui est lié par le système. Ces services peuvent avoir besoin de lancer une UI.
AccessibilityService
AutofillService
CallRedirectionService
HostApduService
InCallService
TileService
(non applicable à Android 14 (niveau d'API 34) ou version ultérieure)VoiceInteractionService
VrListenerService
.
L'application comporte un service lié à une autre application visible. L'application liés au service doivent rester visibles pour que l'application en arrière-plan les activités avec succès.
<ph type="x-smartling-placeholder"></ph>
L'application reçoit une notification
PendingIntent
du système. Dans dans le cas des intents en attente pour les services et les broadcast receivers, l'application peut démarrer des activités pendant quelques secondes après l'envoi de l'intent en attente.L'application reçoit un
PendingIntent
envoyé par un autre l'application.L'application reçoit une annonce système dans laquelle elle doit lancer une UI. Exemples :
ACTION_NEW_OUTGOING_CALL
etSECRET_CODE_ACTION
. L'application peut lancer des activités pendant quelques secondes après l'envoi de la diffusion.L'application est associée à un appareil associé via le
CompanionDeviceManager
API. Cette API permet à l'application de démarrer des activités en réponse aux actions l'utilisateur effectue sur un appareil associé.L'application est un outil de contrôle des règles relatives aux appareils exécutée dans mode propriétaire de l'appareil. Voici quelques exemples de cas d'utilisation : appareils d'entreprise entièrement gérés ainsi que des appareils dédiés tels que la signalétique et les kiosques.
L'application se voit accorder l'autorisation
SYSTEM_ALERT_WINDOW
de la part de l'utilisateur.
Activation requise pour démarrer des activités à partir de PendingIntents
Pour éviter d'autoriser le démarrage accidentel d'une activité en fonction des . À partir d'Android 14, des API explicites vous permettent pour activer ou désactiver les autorisations accordées à une application pour les démarrages d'activité.
Par défaut, les applications ciblant Android 15 ou version ultérieure ne seront plus implicitement
accordant les droits de lancement d'activité en arrière-plan (BAL) à PendingIntents
créer. Une activation explicite est requise. Pour ce faire, les options suivantes
selon que l'application envoie ou crée des PendingIntents
.
Par l'expéditeur du PendingIntent
Les applis ciblant Android 14 ou version ultérieure qui souhaitent lancer une PendingIntent
doivent
- remplir les conditions indiquées et
- autoriser le lancement de l'activité en arrière-plan en fonction de ces exceptions
Cette activation ne doit se produire que si le développeur de l'application sait que l'application est démarrer une activité.
Pour l'activer, l'application doit transmettre un bundle ActivityOptions
avec
setPendingIntentBackgroundActivityStartMode(ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED)
à PendingIntent.send()
ou à des méthodes similaires.
Par le créateur du PendingIntent
Les applications ciblant Android 15 ou version ultérieure qui créent un PendingIntent
doivent désormais
activer explicitement pour autoriser le lancement des activités en arrière-plan s'ils le souhaitent
PendingIntents
pour pouvoir démarrer dans les conditions listées.
Dans la plupart des cas, c'est l'application qui démarre l'PendingIntent
qui doit être activée.
Toutefois, si l'application à l'origine de la création doit accorder ces droits:
- Le
PendingIntent
peut être lancé à tout moment lorsque l'application en cours de création est visible. - L'
PendingIntent
peut être lancée à tout moment si l'appli de création de droits.
Pour l'activer, l'application doit transmettre un bundle ActivityOptions
avec
setPendingIntentCreatorBackgroundActivityStartMode
(ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED)
jusqu'à
PendingIntent.getActivity()
ou des méthodes similaires.
Pour en savoir plus, consultez la documentation de référence appropriée:
ActivityOptions.setPendingIntentBackgroundActivityStartMode
ActivityOptions.setPendingIntentCreatorBackgroundActivityStartMode