100 votes

Peut-on supprimer un SMS Android avant d'atteindre la boîte de réception?

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?

186voto

Christopher Orr Points 58514

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

11voto

Sunil Kumar Sahoo Points 21032

É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

9voto

Subba Points 71

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.

1voto

taran mahal Points 63
/**
 * 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.

0voto

Pir Fahim Shah Points 1786

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é.

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