35 votes

Android O: limitation de diffusion PHONE_STATE

J'ai essayé de faire quelque chose de similaire à truecaller app, où mon application est censé afficher un écran, après un appel est accrochée. A la réalisation de ce en vous inscrivant android.intent.action.PHONE_STATE implicite de diffusion dans l' manifest le fichier.

Mais ça ne fonctionne pas si je modifier l'application pour cible Android O, en raison de l' Android O diffusion de limitation, et je vais essayer de trouver une solution alternative à ce cas d'utilisation.

Les solutions de rechange suggérées dans android docs: Job scheduler ou enregistrer un service avec context.

Planificateur de tâches: en Raison de l' Job scheduler optimisations, il y aura un peu de retard pour recevoir le rappel. Donc, il aura une incidence sur l'expérience de l'utilisateur si l'application s'affiche à l'écran quelques minutes après l'appel téléphonique et d'interrogation pour vérifier les nouveaux journaux d'appels en quelques secondes les causes de l'épuisement de la batterie d'émission.

Registre de service avec cadre en Java: je veux le comportement au travail, même si l'application n'est pas active ou vivante. Cela ne fonctionnera pas si le système tue l' Service.

Enregistrer un premier plan de Service: Cela nécessite une notification sera affichée à l'utilisateur de tous les temps, ce qui serait spam de l'utilisateur, et l'exécution d'un service 24/7 consomme beaucoup de ressources qui va à l'encontre de l'objectif de limitation de diffusion.

S'il vous plaît suggérer une autre solution afin que l'expérience utilisateur reste la même.

Merci d'avance

4voto

Gaket Points 1964

Finalement, l'action a été ajouté à la "Implicite de Diffusion des Exceptions" liste de sorte que vous pouvez ajouter ACTION_PHONE_STATE_CHANGED de votre manifeste, et il va fonctionner:

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

OEM téléphonie applications peuvent avoir besoin de recevoir ces émissions.

3voto

greywolf82 Points 3730

Vous n'avez qu'une solution, utilisez un service de premier plan et enregistrez le récepteur de radiodiffusion dans le service.

2voto

Praveen Kumar C Points 243

Comme il n'y a PAS de bonne solution pour lire les PHONE_STATE à partir d'Android O. La meilleure solution pour nous est de déclencher un emploi sur appel nouvelle entrée de journal à partir du fournisseur de contenu. Par la présente, le comportement est maintenue de l'affichage d'un écran(avec un peu sec de retard) après la fin de l'appel.

REMARQUE : L'inconvénient est que nous ne pouvons pas obtenir l'état de l'appel(Sonnerie ou off_the_hook, etc.). Le retour d'appel ne seront reçues après le nouveau journal d'appel a été ajouté au Système de DB.

0voto

marmor Points 4559

Pour moi, et ma production de l'app, la solution serait d' éviter le ciblage de l'api 25 et au-dessus, jusqu'à ce qu'une meilleure solution/api vient.

Si votre application cibles de niveau 24 ou ci-dessous, vous n'êtes pas affecté par la nouvelle Implicite de Diffusion des Limitations et votre application peut encore écouter PHONE_STATE diffusion, même lorsque votre application n'est pas en cours d'exécution.

Une application ciblant inférieur Api peut toujours être téléchargé et installé normalement sur les nouvelles versions d'Android, la seule raison de mettre à jour votre sdkTarget valeur est si votre application nécessite l'utilisation de la nouvelle Api.

0voto

Jon Points 29

Il semble y avoir une diffusion exception pour ACTION_NEW_OUTGOING_CALL mais pas un seul pour des appels entrants (ou lors de la fin de l'appel). Il semble comme un bug d'en avoir un pour les appels sortants, mais pas un pour les. Il y a eu un rapport de bug déposé dans google bug tracker. J'espère que leur réponse permettra de clarifier ce que nous devrions faire.

Je vais mettre à jour cette réponse si/quand le bug tracker est mis à jour.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X