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?
acojan benignamente/Upvote la respuesta si usted tiene su solución :) –
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