2010-08-22 7 views

Répondre

0

Pour Android, la réponse est non. Vous pouvez implémenter un BroadcastReceiver appelé chaque fois que l'appareil reçoit un SMS mais ne peut pas conserver les autres applications (par exemple, l'application de messagerie intégrée).

1

Dans Android, vous pouvez enregistrer un BroadcastReceiver pour être averti qu'un SMS a été reçu, marquer le message comme lu dans le fournisseur de contenu SMS, puis supprimer ce message spécifique du fournisseur de contenu. Cela empêchera toute autre application de pouvoir lire le message une fois que vous l'avez supprimé et qu'aucune notification ne sera affichée dans l'espace de notification. Cela dit, je n'ai aucune idée de ce qui arrivera aux applications qui reçoivent l'Intention, indiquant qu'un message a été reçu mais ne peut pas y accéder dans la base de données. Cela pourrait entraîner un comportement imprévisible en raison d'un certain nombre de conditions de course.

0

Pour Android, la réponse est Oui.

android.provider.Telephony.SMS_RECEIVED événement est une diffusion ordonnée et vous pouvez régler la priorité. Cela signifie que votre application recevra l'événement avant tout le monde. Et vous pouvez annuler la diffusion pour le reste des récepteurs de diffusion.

Vous trouverez plus d'informations ici: stackoverflow.com/can-we-delete-an-sms-in-android-before-it-reaches-the-inbox/

0

Dans Android, une fois que vous avez reçu un message SMS dans votre application, vous pouvez utiliser un objet intention de transmettre les détails du message à une autre activité/application pour un traitement ultérieur . Si vous devez transmettre le message à votre propre application, utilisez la méthode sendBroadcast() pour diffuser l'objet Intent. Dans votre activité, vous devez simplement utiliser la méthode registerReceiver() pour écouter la diffusion.

J'espère que ça aide! Wei-Meng Lee

1

Oui. C'est possible sur Android. Je le fais dans une application que je développe. Ce que vous devez faire est:

public class SMSService extends BroadcastReceiver { 
public static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED"; 
private String phoneNumber; 
private String sms; 
private Context context; 

@Override 
public void onReceive(Context context, Intent intent) { 
    this.context = context; 
    if (intent.getAction().equals(SMS_RECEIVED)) { 
     Bundle bundle = intent.getExtras(); 
     SmsMessage[] msgs = null; 

     if (bundle != null) { 
      Object[] pdus = (Object[]) bundle.get("pdus"); 
      msgs = new SmsMessage[pdus.length]; 

      for (int i = 0; i < msgs.length; i++) { 

       msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); 

       // get sms message 
       sms = msgs[i].getMessageBody(); 

       // get phone number 
       phoneNumber = msgs[i].getOriginatingAddress(); 

       if (phoneNumber.equals("Some other phone number")){ 
        // the sms will not reach normal sms app 
        abortBroadcast(); 

       Thread thread = new Thread(null, 
         doBackgroundThreadProcessing, "Background"); 
       thread.start(); 
       } 

      } 
     } 
    } 
} 

private Runnable doBackgroundThreadProcessing = new Runnable() { 
    // do whatever you want 
}; 

IMPORTANT: Dans le fichier manifeste, vous devez définir la priorité de SMS avec un nombre élevé. Je crois que le maximum est 100.

<!-- SMS Service --> 
    <service android:name=".SMSService" /> 
    <receiver android:name=".SMSService"> 
     <intent-filter android:priority="100"> 
      <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
     </intent-filter> 
    </receiver> 
+0

La valeur maximale pour Android: la priorité est 1000. Voir ici: http://developer.android.com/guide/topics/manifest/intent-filter-element.html –

Questions connexes