¿Cómo analizar los SMS entrantes en Android?

¿Cómo puedo codificar en Android para que mi aplicación pueda analizar un SMS entrante y tal vez bloquearlo o hacer algo (tal vez mover a una carpeta de SMS diferente) ANTES de que el SMS realmente genere una notificación que le indique al usuario un nuevo SMS? Me enfocaría en Android 2.1 y superior.

Me gustaría analizar los SMS entrantes en busca de palabras de spam especificadas por el usuario y, si se encuentran, desearía eliminar / marcar como leído / mover el mensaje a una carpeta diferente.

preguntado el 09 de enero de 11 a las 05:01

3 Respuestas

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();
        }
  }

recuerde agregarlo en el manifiesto y agregar una prioridad más alta (100) para la transmisión o sms irá primero a la bandeja de entrada y recibirá 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.

Respondido 23 Feb 11, 23:02

Bueno, puedes atrapar los SMS entrantes, pero creo que no podrás bloquear la notificación .....
Si desea eliminar SMS, aquí hay un hilo que puede ayudar ...
¿Cómo eliminar un SMS de la bandeja de entrada en Android mediante programación?

contestado el 23 de mayo de 17 a las 14:05

Bueno, necesito que Android NO muestre la notificación predeterminada de 'mensaje nuevo' si mi aplicación ya ha manejado los SMS entrantes. Entonces ese es un requisito importante para la mejor experiencia de usuario :( - Saurabh Kumar

bueno, hay muchos hilos en StackOverflow que te dirán que no es posible sin usar tus propias clases extendidas de aquellas que están ocultas ... pero sí, también quieres esperar la respuesta de otros ........ - viv

Ahora abortBroadcast (); El método se puede utilizar para restringir que el mensaje entrante vaya a la bandeja de entrada. - Arun Badole

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

Respondido 26 Oct 12, 09:10

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.