Android 10 (livello API 29) e limitazioni relative al luogo in cui è possibile avviare le app attività quando l'app è in esecuzione in sullo sfondo. Queste restrizioni aiutano a ridurre al minimo le interruzioni per l'utente e consentono all'utente di avere maggiore controllo su ciò che viene mostrato sul suo schermo.
Questa guida presenta le notifiche come alternativa per avviare attività da sullo sfondo. Elenca anche i casi specifici in cui la restrizione .
Mostra invece le notifiche
In quasi tutti i casi, le app in background devono visualizzare notifiche urgenti per Fornire informazioni urgenti all'utente invece di avviare direttamente un'attività. Queste notifiche includono la gestione di una telefonata in arrivo o di una sveglia attiva. orologio.
Questo sistema di avviso e promemoria basato sulle notifiche offre numerosi vantaggi per gli utenti:
- Quando utilizza il dispositivo, l'utente vede una notifica che gli consente di e rispondere. L'utente mantiene il proprio contesto corrente e ha il controllo i contenuti visualizzati sullo schermo.
- Le notifiche urgenti rispettano le Regole Non disturbare. Per Ad esempio, gli utenti potrebbero consentire solo le chiamate provenienti da contatti specifici o da chiamanti quando è attiva la modalità Non disturbare.
- Quando lo schermo del dispositivo è spento, viene avviato l'intent a schermo intero immediatamente.
- Nella schermata Impostazioni del dispositivo, l'utente può vedere di quali app sono notifiche inviate di recente, anche da canali di notifica specifici. Da questa schermata, l'utente può controllare le proprie preferenze di notifica.
Quando le app possono avviare attività
Le app con Android 10 o versioni successive possono avviare attività quando vengono soddisfatte una o più delle seguenti condizioni:
- L'app ha una finestra visibile, ad esempio un'attività in primo piano.
- L'app ha un'attività nella back stack del dell'attività in primo piano.
L'app presenta un'attività nella pila posteriore di un'attività esistente nella Schermata Recenti.
L'app presenta un'attività iniziata molto di recente.
L'app
finish()
attiva un'attività molto recente. Questo vale solo quando l'app presentava un'attività in primo piano o un'attività nello stack posteriore dell' attività in primo piano nel momento in cui è stato chiamatofinish()
.L'app include uno dei seguenti servizi vincolato dal sistema. Questi e servizi potrebbero dover avviare una UI.
AccessibilityService
AutofillService
CallRedirectionService
HostApduService
InCallService
TileService
(non applicabile in Android 14 (livello API 34) e versioni successive)VoiceInteractionService
VrListenerService
.
L'app include un servizio associato a un'altra app visibile. L'app associati al servizio devono rimanere visibili affinché l'app in background iniziare correttamente le attività.
L'app riceve una notifica
PendingIntent
dal sistema. Nel nel caso degli intent in sospeso per servizi e broadcast receiver, l'app può avviare attività per alcuni secondi dopo l'invio dell'intent in attesa.L'app riceve un
PendingIntent
inviato da un altro indirizzo dell'app.L'app riceve un annuncio di sistema in cui è previsto l'avvio di un nell'interfaccia utente. Alcuni esempi sono
ACTION_NEW_OUTGOING_CALL
eSECRET_CODE_ACTION
. L'app può avviare attività per alcuni secondi dopo l'invio della trasmissione.L'app viene associata a un dispositivo hardware associato tramite la
CompanionDeviceManager
API. Questa API consente all'app di avviare attività in risposta ad azioni che eseguita dall'utente su un dispositivo accoppiato.L'app è un controller dei criteri dei dispositivi in esecuzione modalità proprietario del dispositivo. Esempi di casi d'uso includono dispositivi aziendali completamente gestiti nonché dispositivi dedicati come le tecnologie segnaletica e chioschi.
All'app viene concessa l'autorizzazione
SYSTEM_ALERT_WINDOW
dall'utente.
Attivazione obbligatoria quando si avviano attività da PendingIntent
Per evitare di consentire avvii accidentali di attività in base ai , a partire da Android 14 esistono API esplicite che ti consentono attivare o disattivare la concessione di autorizzazioni di un'app per gli avvii dell'attività.
Per impostazione predefinita, le app che hanno come target Android 15 o versioni successive non saranno più implicitamente
concedendo i privilegi per l'avvio di attività in background (BAL) a PendingIntents
,
creare. A questo scopo, è necessaria un'attivazione esplicita. Queste sono le opzioni
a seconda che l'app stia inviando o creando PendingIntents
.
Dal mittente dell'PendingIntent
Le app destinate ad Android 14 o versioni successive che vogliono avviare un PendingIntent
devono
- soddisfare le condizioni elencate e
- attivare per consentire l'avvio di attività in background in base a queste eccezioni
Questa attivazione dovrebbe avvenire solo se lo sviluppatore sa che l'app è avvierà un'attività.
Per essere attivata, l'app deve trasmettere un pacchetto ActivityOptions
con
setPendingIntentBackgroundActivityStartMode(ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED)
a PendingIntent.send()
o a metodi simili.
Dall'autore di PendingIntent
Le app che hanno come target Android 15 o versioni successive che creano un PendingIntent
adesso devono
attivare esplicitamente di consentire l'avvio dell'attività in background se vogliono che
PendingIntents
per l'avvio nelle condizioni elencate.
Nella maggior parte dei casi, l'attivazione dovrebbe essere l'app che avvia il PendingIntent
.
Tuttavia, se l'app in fase di creazione deve concedere i seguenti privilegi:
- L'app
PendingIntent
può essere avviata in qualsiasi momento in cui è visibile la creazione dell'app. - L'
PendingIntent
può essere avviata in qualsiasi momento se l'app di creazione ha offerte speciali privilegiati.
Per essere attivata, l'app deve trasmettere un pacchetto ActivityOptions
con
setPendingIntentCreatorBackgroundActivityStartMode
(ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED)
al
PendingIntent.getActivity()
o metodi simili.
Per ulteriori dettagli, leggi la relativa documentazione di riferimento:
ActivityOptions.setPendingIntentBackgroundActivityStartMode
ActivityOptions.setPendingIntentCreatorBackgroundActivityStartMode