我正在开发一个短信拦截器应用程序,我正在使用广播接收器和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();
}
}
}
}
}
有人建议here短信广播无法中止,因为Android不允许它.但是我看到很多人建议使用abortBroadcast()来阻止短信,而且我也知道市场上一些实际上可以阻止短信的短信拦截器应用程序.我不知道他们是否正在使用abortbroadcast.
有任何想法吗?
最佳答案
绝对可以做到这一点,你写的代码非常好,
从< intent-filter android:priority =“9999999”>中尝试changin优先级to< intent-filter android:priority =“99999999”>,基本上比你给出的优先级更高,然后尝试检查.