Peut-on supprimer un SMS sur Android avant qu’il n’atteigne la boîte de réception?

Je supprime un SMS de la boîte de réception mais je veux savoir: comment puis-je le supprimer avant qu’il n’atteigne la boîte de réception?

Oui.

Malgré certaines réactions négatives à cette question, il existe des utilisations légitimes pour l’interception de SMS. Par exemple: automatiser la vérification des numéros de téléphone, les services fournis via SMS (bien que cela soit généralement le cas avec les SMS de données) ou les applications qui améliorent autrement l’expérience utilisateur en traitant des messages spécialement formatés pour les montrer sous Android -Ispécifique UI.

À partir d’Android 1.6, les diffusions de messages SMS entrants ( android.provider.Telephony.SMS_RECEIVED ) sont livrées en tant que ” diffusion ordonnée “, ce qui signifie que vous pouvez indiquer au système quels composants doivent recevoir la diffusion en premier.

Si vous définissez un atsortingbut android:priority sur votre SMS-listening, vous recevrez alors la notification avant l’application SMS native.

À ce stade, vous pouvez annuler la diffusion, ce qui l’empêche de se propager à d’autres applications.


Mise à jour (octobre 2013): à l’ arrivée d’Android 4.4, les modifications apscopes aux API SMS risquent d’affecter la capacité d’une application à influencer la dissortingbution des SMS.
Découvrez ce post de blog pour les développeurs Android pour plus d’informations:
http://android-developers.blogspot.com/2013/10/getting-your-sms-apps-ready-for-kitkat.html

Étape 1: Créez votre récepteur de diffusion personnalisé pour recevoir des SMS. écrire la logique pour annuler le Broadst afin que le message ne soit pas disponible dans votre boîte de réception

 public class SMSReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { if(conditionMatches){ abortBroadcast(); } } } 

Étape 2 Enregistrer le récepteur de diffusion dans AndoridManifest et mettre Android: la valeur de priorité est un grand nombre

      

C’est tout

Comment fonctionne le code ci-dessus?

Dans la mesure où la réception de SMS en diffusion large est une diffusion ordonnée, le récepteur à priorité élevée recevra en premier afin que votre application reçoive en premier et après réception, vous annulez la diffusion. Donc, aucune autre application ne peut la recevoir. Les sms n’existeront donc pas dans la boîte de réception

La solution ci-dessous (“android: priority” et abortBroadcast ()) fonctionne aussi longtemps que l’application Android Messaging par défaut (je voulais dire l’application Android Messaging stock). Si l’utilisateur installe “GoSMSPro” ou “HandcentSMS”, ces applications affichent toujours des messages dans la boîte de réception, je crois que cela est dû à “android: priority”. Je ne vois pas de meilleur moyen de résoudre le problème ci-dessus, si des applications de messagerie tierces sont installées sur le téléphone.

 /** * Check priority * @param activity */ public static void receiverPriority(Activity activity){ Intent smsRecvIntent = new Intent("android.provider.Telephony.SMS_RECEIVED"); List infos = activity.getPackageManager().queryBroadcastReceivers(smsRecvIntent, 0); for (ResolveInfo info : infos) { System.out.println("Receiver: " + info.activityInfo.name + ", priority=" + info.priority); } } 

Vérifiez la priorité et définissez une priorité plus élevée (dans votre manifeste) que les autres récepteurs.

Si vous avez un scénario comme celui-ci et que vous souhaitez supprimer ou ignorer le message lié à ce numéro de contact “+ 44xxxxx”, utilisez ce code dans le récepteur de diffusion SMS.

  if(sender.equalsIgnoreCase("+44xxxxxx") this.abortBroadCast(); 

Vous devez également définir la haute priorité.