不能使用abortBroadcast防止SMS()?(SMS cannot be prevented

2019-09-18 17:59发布

我工作的一个短信拦截应用,在我使用的广播接收器和abortBroadcast()方法 - 尽可能多的脂肪酶建议在这里 - 防止到达收件箱,并提醒用户的消息。 但对我来说,当我使用模拟器发送短信,SMS消息将不会阻挡,并到达收件箱中,我也得到一个错误:

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

这不会终止在模拟器中的应用程序,但是当我测试了我的手机上的应用程序被终止。

是的,我已经设置了接收器的优先级为较高的数字,并要求该权限,你在这里看到:

<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"/>

最后,这里是我的代码:

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与否。

有任何想法吗?

Answer 1:

当然,你可以做到这一点,那你写的代码是完全正常的,

从尝试了变化优先<intent-filter android:priority="9999999"><intent-filter android:priority="99999999">基本上更高的优先级,然后你给什么,然后尝试检查。



Answer 2:

难道是显示来自接收机的吐司? 也许你的接收机清单不正确注册。

尝试改变,

<receiver android:name="SMSMonitor">

<receiver android:name=".SMSMonitor">


Answer 3:

“由于是Android 1.6的,收到的SMS消息广播(android.provider.Telephony.SMS_RECEIVED)交付为‘有序广播’ - 这意味着你可以告诉哪些组件应首先接收广播系统。” 和我使用的是Android 1.5和广播的非有序!

感谢这家伙在这里链接



文章来源: SMS cannot be prevented using abortBroadcast()?