Android O: PHONE_STATE limite di trasmissione



android foreground service (4)

Alla fine, l'azione è stata aggiunta all'elenco "Eccezioni di trasmissione implicite" in modo che tu possa aggiungere ACTION_PHONE_STATE_CHANGED al manifest e funzionerà:

https://developer.android.com/guide/components/broadcast-exceptions

ACTION_CARRIER_CONFIG_CHANGED, TelephonyIntents.ACTION _ * _ SUBSCRIPTION_CHANGED, "TelephonyIntents.SECRET_CODE_ACTION", ACTION_PHONE_STATE_CHANGED, ACTION_PHONE_ACCOUNT_REGISTERED, ACTION_PHONE_ACCOUNT_UNREGISTERED

Le app di telefonia OEM potrebbero dover ricevere queste trasmissioni.

https://ffff65535.com

Ho cercato di fare qualcosa di simile all'app truecaller, in cui la mia app dovrebbe mostrare una schermata dopo che una chiamata è stata interrotta. Stavo raggiungendo questo registrando la trasmissione implicita android.intent.action.PHONE_STATE nel file manifest .

Ma non funziona se cambio l'app per il targeting di Android O, a causa del limite di trasmissione di Android O , e sto cercando di capire una soluzione alternativa a questo caso d'uso.

Soluzioni alternative suggerite nei documenti android: Job scheduler o registra un service con context .

Job scheduler: a causa dell'ottimizzazione del Job scheduler del Job scheduler ci sarà un certo ritardo per ricevere la richiamata. In tal modo influirà sull'esperienza dell'utente se la schermata dell'app viene visualizzata dopo alcuni minuti dalla chiamata telefonica e il polling per verificare la presenza di nuovi registri delle chiamate ogni pochi secondi, causando problemi di esaurimento della batteria.

Registrare il servizio con il contesto in Java : voglio che il comportamento funzioni anche se l'app non è attiva o attiva. Questo non funzionerà se il sistema uccide il Service .

Registrazione di un servizio in primo piano : richiede una notifica all'utente per tutto il tempo, che sarebbe spam dell'utente e l'esecuzione di un servizio 24 ore su 24, 7 giorni su 7, consuma molte risorse che vanificano l'intero scopo della limitazione della trasmissione.

Si prega di suggerire una soluzione alternativa in modo che l'esperienza dell'utente rimanga la stessa.

Grazie in anticipo


Come menzionato qui: https://issuetracker.google.com/37273064#comment4 , ACTION_PHONE_STATE_CHANGED (android.intent.action.PHONE_STATE) sarà autorizzato nella versione Android O. Sebbene possano essere sostituiti con un meccanismo diverso in una versione futura.


Per me, e per la mia app di produzione, la soluzione sarebbe quella di evitare il targeting api 25 e versioni successive , fino a quando non si verificherà una soluzione migliore / api.

Se la tua app raggiunge il livello 24 o inferiore, non sei interessato dalle nuove limitazioni implicite del broadcast e la tua app può ancora ascoltare le trasmissioni PHONE_STATE anche quando la tua app non è in esecuzione.

Un'app che punta alle API inferiori può ancora essere scaricata e installata normalmente sulle nuove versioni di Android, l'unico motivo per aggiornare il valore sdkTarget è se l'app richiede l'utilizzo di nuove API.


Poiché NON esiste una soluzione adeguata per leggere PHONE_STATE da Android O. L'alternativa migliore che possiamo fare è attivare un lavoro sulla nuova voce del registro chiamate dal fornitore di contenuti . Di conseguenza, viene mantenuto il comportamento di mostrare una schermata (con qualche secondo di ritardo) al termine della chiamata.

NOTA: lo svantaggio è che non possiamo ottenere lo stato della telefonata (suoneria o off_the_hook ecc.). La richiamata verrà ricevuta solo dopo che il nuovo registro delle chiamate è stato aggiunto al DB di sistema.





android-8.0-oreo