Je suis de la suppression d'un SMS à partir de la boîte de réception, mais je veux savoir: Comment puis-je le supprimer avant d'atteindre la boîte de réception?
Réponses
Trop de publicités?Oui.
Malgré quelques réactions négatives à cette question, il y a des utilisations légitimes pour SMS interception. Par exemple: l'automatisation de vérification de numéro de téléphone, les services qui sont mis en service par SMS (même si en général cela devrait être fait avec les données de SMS), ou pour les applications qui, autrement, améliorer l'expérience utilisateur en traitement spécialement mis en forme les messages afin de les présenter dans un joli Android, l'INTERFACE utilisateur.
Comme d'Android 1.6, SMS entrant émissions (android.provider.Telephony.SMS_RECEIVED
) sont fournis comme un "ordonné de diffusion" — ce qui signifie que vous pouvez indiquer au système les composants qui doivent recevoir la diffusion de la première.
Si vous définissez un android:priority
d'attribut sur votre SMS-écoute, <intent-filter>
, vous recevrez la notification avant le natif de l'application SMS.
À ce stade, vous pouvez annuler la diffusion, l'empêchant d'être propagées à d'autres applications.
Mise à jour (octobre 2013): Quand Android 4.4 arrive, il fera des changements pour les SMS Api qui peut avoir une incidence sur l'application de capacité à influencer l'envoi de SMS.
Découvrez cet Développeurs Android blog pour plus d'info:
http://android-developers.blogspot.com/2013/10/getting-your-sms-apps-ready-for-kitkat.html
Étape 1: Créer votre propre récepteur de radiodiffusion pour la réception de sms. écrire la logique pour annuler la broadst de sorte que le message ne sera pas disponible à votre boîte de réception
public class SMSReceiver extends BroadcastReceiver
{
public void onReceive(Context context, Intent intent)
{
if(conditionMatches){
abortBroadcast();
}
}
}
Étape 2 Registre récepteur de radiodiffusion dans AndoridManifest et de mettre android:la valeur de la priorité d'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 Ça
Comment fonctionne le code ci-dessus travail
SMS de la réception radiophonique est d'un ordre de diffusion du récepteur avec une haute priorité va recevoir le premier, de sorte que votre demande de recevoir le premier, et après avoir reçu de vous l'abandon de la diffusion. Si aucune autre application ne peut le recevoir. D'où le sms n'existe pas dans la boîte de réception
La ci-dessous("android:la priorité" et abortBroadcast()) solution fonctionne aussi longtemps que Android est l'application de Messagerie par défaut(je voulais stock Android est l'application de Messagerie). Si l'utilisateur installe "GoSMSPro" ou "HandcentSMS", ces applications sont toujours afficher les messages dans la boîte de réception, je crois que cela est dû à "android:la priorité". Je ne vois pas de meilleure façon de résoudre le problème ci-dessus, si le tiers des applications de messagerie installé 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érifier prioritaires et de définir plus grande priorité (dans le manifeste) que les autres récepteurs.
Si vous avez un scénario de ce genre et que vous souhaitez supprimer ou ignorer le message de ce numéro de contact "+44xxxxx" etc, puis utiliser ce code SMS récepteur de Radiodiffusion
if(sender.equalsIgnoreCase("+44xxxxxx")
this.abortBroadCast();
Vous devez également définir le niveau de priorité élevé.