Я работаю над приложение для блокировки смс, в котором я использую широковещательный приемник и метод abortBroadcast() - как многие предлагали здесь, - чтобы сообщения не попадали в папку "Входящие" и не предупреждали пользователя.Но в моем случае, когда я отправляю смс с помощью эмулятора, смс-сообщение не блокируется и достигает папки «Входящие», также я получаю сообщение об ошибке:
06-29 09:19:05.854: E/BroadcastReceiver(868): BroadcastReceiver trying to return result during a non-ordered broadcast
, которое не завершает работу приложения в эмуляторе, однако Приложение закрывается, когда я тестирую его на своем телефоне.
И да, я установил высокий приоритет получателя и запросил разрешения, как вы видите здесь:
Наконец, вот мой код:
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();
}
}
}
}
}
Кто-то предположил здесь, что SMS-трансляции не могут быть прерваны, потому что Android этого не позволяет. Но я видел здесь, как многие ребята предлагали использовать abortBroadcast() для блокировки смс, а также я знаю некоторые приложения для блокировки смс на рынке, которые на самом деле МОГУТ блокировать смс. Я не знаю, используют ли они abortbroadcast или нет.
Есть идеи?