Je développe une application qui doit exécuter du code (Networking) à chaque fois qu'un SMS est reçu.
Dans l'API 25 et inférieur c'est bien, j'inscris un receiver
implicite dans le fichier manifeste et démarre mon service dans la classe spécifiée qui a étendu BroadcastReceiver
. Dans l'API 26, cependant, vous ne pouvez pas enregistrer android.provider.Telephony.SMS_RECEIVED
dans un receiver
car cela ne fonctionnera pas.Exécuter le service sur les SMS entrants dans android Oreo
De la documentation Android:
Remarque: Si votre application cible niveau de l'API 26 ou plus, vous ne pouvez pas utiliser le manifeste de déclarer un récepteur pour les émissions implicites (émissions qui ne ciblent pas votre application spécifique), à l'exception pour quelques émissions implicites qui sont exemptées de cette restriction. Dans la plupart des cas, vous pouvez utiliser des tâches planifiées à la place.
J'ai lu plusieurs articles comme this one on medium. Il existe des solutions comme JobScheduler
ou Explicit Receiver
, mais la première est utilisée pour les changements d'état du réseau et je n'ai pas trouvé de moyen de déclencher le travail sur l'événement SMS_RECEIVED
et le second est valide jusqu'à ce que votre activité soit opérationnelle.
En raison de la nature de mon application, j'ai besoin d'écouter les SMS entrants, que l'application soit en cours d'exécution ou non. Comment faire cela dans API 26+?
Modifier
Peut-être que le code in JobInfoBuilder doc on android website pourrait aider. Il surveille les changements dans les photos sur un appareil et démarre le travail sur le changement. Cependant, je ne peux pas trouver un bon Uri faire la même chose avec le SMS (même pas sûr s'il est possible de surveiller SMS via ContentObserver
)
Je pense que le planificateur de travaux avec la méthode de vérification périodique peut être la bonne solution. – VVB
@VVB Je suis en train de développer une application TTS qui devrait jouer le son quand le SMS est reçu, mais il semble que baisser le délai pour détecter les SMS reçus a un impact négatif sur les performances et ce n'est pas une bonne solution. – szamani20
L'action 'SMS_RECEIVED' est exemptée des nouvelles restrictions de diffusion implicites. https://developer.android.com/guide/components/broadcast-exceptions.html –