2012-06-29 8 views
5

Estoy trabajando en una aplicación de bloqueo de sms, en la que estoy usando el receptor de difusión y el método abortBroadcast(), como muchas personas han sugerido aquí, para evitar que los mensajes lleguen a la bandeja de entrada y alertando al usuario. Pero en mi caso, cuando envío un SMS utilizando el emulador, el mensaje SMS no conseguirá bloqueado, y llega a la bandeja de entrada, también me da un error:No se pueden evitar los SMS usando abortBroadcast()?

06-29 09:19:05.854: E/BroadcastReceiver(868): BroadcastReceiver trying to return result during a non-ordered broadcast 

que no finalice la aplicación de la emulador, sin embargo, la aplicación se termina cuando la pruebo en mi teléfono.

Y sí, he puesto la prioridad del receptor a un número alto y solicitado los permisos como se puede ver aquí:

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

<uses-permission android:name="android.permission.RECEIVE_SMS" /> 
<uses-permission android:name="android.permission.READ_SMS" /> 
<uses-permission android:name="android.permission.RAISED_THREAD_PRIORITY"/> 

Por último, aquí está mi código:

public class SMSMonitor extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     boolean isOn = loadState(context,"isOn");// is blocking enabled? 
     Bundle bundle = intent.getExtras(); 
     Object messages[] = (Object[]) bundle.get("pdus"); 
     SmsMessage smsMessage[] = new SmsMessage[messages.length]; 
     String mAddress; 
     String mBody; 
     String mTime; 
     if(isOn){ 
      // if spam blocking is enabled. 
      for (int n = 0; n < messages.length; n++) { 
       smsMessage[n] = SmsMessage.createFromPdu((byte[]) messages[n]); 
       mAddress=smsMessage[n].getDisplayOriginatingAddress().toString(); 

       mBody=smsMessage[n].getDisplayMessageBody().toString(); 

       mTime=getTime(); 
       if(isBlackList(mAddress)== true) { 
        this.addLog(mAddress, mBody, mTime); 
        abortBroadcast(); 
        Toast.makeText(context,"Incoming SMS was blocked and logged.", Toast.LENGTH_LONG).show(); 
       } 
      } 
     } 
    } 
} 

Alguien sugirió here que las transmisiones de SMS no se pueden anular porque Android no lo permitirá. Pero he visto a muchos chicos aquí sugirieron usar abortBroadcast() para bloquear un sms, y también sé que algunas aplicaciones de bloqueadores de SMS en el mercado realmente pueden bloquear SMS. No sé si están utilizando abortbroadcast o no.

¿Alguna idea?

+0

acojan benignamente/Upvote la respuesta si usted tiene su solución :) –

+0

creo que tengo la respuesta, "A partir de Android 1.6, las transmisiones de mensajes SMS entrantes (android.provider.Telephony.SMS_RECEIVED) se envían como una "transmisión ordenada", lo que significa que puede decirle al sistema qué componentes deben recibir la transmisión primero ". y estoy usando Android 1.5 ¡Y la transmisión no está ordenada! Gracias a este tipo aquí [enlace] (http://stackoverflow.com/questions/419184/how-to-delete-an-sms-from-the-inbox-in-android-programmatically) – Wise

Respuesta

1

"A partir de Android 1.6, las transmisiones de mensajes SMS entrantes (android.provider.Telephony.SMS_RECEIVED) se envían como una" transmisión ordenada ", lo que significa que puede decirle al sistema qué componentes deben recibir la transmisión primero." y estoy usando Android 1.5 ¡Y la transmisión no está ordenada!

Gracias a este tipo aquí link

2

Definitivamente se puede hacer esto, código que haya escrito está perfectamente bien,

Trate prioridad cambiando <intent-filter android:priority="9999999">-<intent-filter android:priority="99999999">, básicamente, una mayor prioridad a continuación, lo que ha dado, a continuación, tratar de comprobar.

+0

Gracias por la respuesta, pero eso no parece ayudar. Y supongo que si mi aplicación se perdió la transmisión, no habrá ningún error, solo la notificación. Creo que hay un problema asociado con las transmisiones ordenadas o no ordenadas. – Wise

+0

'Thread.currentThread(). SetPriority (Thread.MAX_PRIORITY);' –

1

¿Se muestran la tostada del receptor? Probablemente su Receptor no está registrado correctamente en Manifiesto.

tratar de cambiar,

<receiver android:name="SMSMonitor"> 

a

<receiver android:name=".SMSMonitor"> 
Cuestiones relacionadas