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?
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?
Réponses:
Oui.
Malgré quelques réactions négatives à cette question, il existe des utilisations légitimes de l'interception SMS. Par exemple: automatiser la vérification du numéro de téléphone, les services qui sont fournis par SMS (bien que généralement cela devrait être fait avec des SMS de données), ou pour les applications qui améliorent autrement l'expérience utilisateur en traitant des messages spécialement formatés afin de les afficher dans un bel Android -UI spécifique.
À partir d'Android 1.6, les diffusions de messages SMS entrants ( android.provider.Telephony.SMS_RECEIVED
) sont livrées sous la forme d'une « 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 android:priority
attribut sur votre écoute SMS <intent-filter>
, vous recevrez alors la notification avant l'application SMS native.
À ce stade, vous pouvez annuler la diffusion, l'empêchant de se propager à d'autres applications.
Mise à jour (octobre 2013): à l' arrivée d'Android 4.4, il apportera des modifications aux API SMS, ce qui peut affecter la capacité d'une application à influencer la livraison de SMS.
Consultez cet article de blog des développeurs Android pour plus d'informations:
http://android-developers.blogspot.com/2013/10/getting-your-sms-apps-ready-for-kitkat.html
1000
, c'est donc possible. En fait, Handcent utilise la priorité 2147483647
.
"Beginning with Android 4.4—any attempt by your app to abort the SMS_RECEIVED_ACTION broadcast will be ignored so all apps interested have the chance to receive it."
.
Étape 1: Créez votre récepteur de diffusion personnalisé pour recevoir des sms. écrivez la logique pour abandonner la diffusion 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 Enregistrez le récepteur de diffusion dans AndoridManifest et mettez Android: valeur de priorité un grand nombre
<receiver android:name=".SMSReceiver" >
<intent-filter android:priority="1000">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
C'est tout
Comment fonctionne le code ci-dessus
Comme la réception de SMS est une diffusion ordonnée, le récepteur avec une priorité élevée recevra en premier afin que votre application reçoive en premier et après réception, vous interrompez la diffusion. Aucune autre application ne peut donc la recevoir. Par conséquent, le sms n'existera pas dans la boîte de réception
La solution ci-dessous ("android: priority" et abortBroadcast ()) fonctionne aussi longtemps que l'application de messagerie Android par défaut (je voulais dire l'application de messagerie Android d'origine). 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: priorité". 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<ResolveInfo> 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 destinataires.
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", etc., utilisez ce code dans SMS Broadcast receiver
if(sender.equalsIgnoreCase("+44xxxxxx")
this.abortBroadCast();
Vous devez également lui attribuer la haute priorité.