2011-01-09 17 views
19

¿Cómo puede codificar I en Android de tal manera que mi aplicación puede analizar un SMS entrante y quizás bloquearlo o hacer algo (tal vez mover a una carpeta diferente SMS) ANTES del SMS en realidad plantea una notificación que indica al usuario de un nuevo SMS? Apuntaría a Android 2.1 y superior.¿Cómo analizar los SMS entrantes en Android?

me gustaría analizar los SMS entrantes para las palabras de spam especificados por el usuario, y si se encuentra que desee eliminar/marcar como leído/mover el mensaje a una carpeta diferente.

Respuesta

24

utilizo este código, como BroadcastReceiver:

public void onReceive(Context context, Intent intent) 
{ 
    //this stops notifications to others 
    this.abortBroadcast(); 

    //---get the SMS message passed in--- 
    Bundle bundle = intent.getExtras(); 
    SmsMessage[] msgs = null; 
    String str = "";    
    if (bundle != null) 
    { 
     //---retrieve the SMS message received--- 
     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]);     
      str += "SMS from " + msgs[i].getOriginatingAddress(); 
      from = msgs[i].getOriginatingAddress(); 
      str += " :"; 
      str += msgs[i].getMessageBody().toString(); 
      msg = msgs[i].getMessageBody().toString(); 
      str += "\n"; 
     } 
     if(checksomething){ 
      //make your actions 
      //and no alert notification and sms not in inbox 
     } 
     else{ 
      //continue the normal process of sms and will get alert and reaches inbox 
      this.clearAbortBroadcast(); 
     } 
    } 

no olvide añadirlo en el manifiesto y añadir una prioridad higgest (100) para su difusión o sms irá primero a la bandeja de entrada y obtener la notificación de alerta.

<receiver android:name=".SmsReceiver"> 
     <intent-filter android:priority="100"> 
      <action android:name="android.provider.Telephony.SMS_RECEIVED"></action> 
     </intent-filter> 
    </receiver> 

Espero que te ayude.

0

Bien u puede atrapar el SMS entrante, pero creo que u no ser capaz de bloquear la notificación .....
Si quieres eliminar SMS Aquí hay un hilo que puede ayudar ....
How to delete an SMS from the inbox in Android programmatically?

+0

así necesito Android para no mostrar el 'nuevo mensaje' notificación predeterminado si mi solicitud ya ha manejado el SMS entrante. Por lo que es un requisito importante para la mejor experiencia de usuario :( –

+0

bien hay muchas discusiones sobre StackOverflow que le dirá u no es posible sin necesidad de utilizar sus propias clases prolongados de los que están ocultos ....... pero sí se wan esperar a que la respuesta del otro también ........ – viv

+1

Ahora abortBroadcast(); método se puede utilizar para restringir el mensaje entrante para ir a la bandeja de entrada. – AB1209

0

Este código funciona en mi dispositivo 2.3.3. HTC MyTouch 4g Slide. el abortBroadcast suprime la notificación notificación + notificación en la barra de estado + no permite que el SMS vaya a la bandeja de entrada. Algunos usuarios mencionaron que no funciona en dispositivos reales y funciona solo en emuladores, que no siempre es así. Si la prioridad es 100, entonces en este dispositivo en particular, el código funciona como se espera.

Cuestiones relacionadas