【问题标题】:SMS cannot be prevented using abortBroadcast()?无法使用 abortBroadcast() 阻止 SMS?
【发布时间】:2012-06-30 20:43:46
【问题描述】:

我正在开发一个短信拦截器应用程序,其中我正在使用广播接收器和 abortBroadcast() 方法——正如许多人在这里所建议的那样——以防止消息到达收件箱并提醒用户。但在我的情况下,当我使用模拟器发送短信时,短信不会被阻止,并且到达收件箱时,我也会收到错误消息:

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();  
                }
            }
        }
    }
}

有人建议here 不能中止 SMS 广播,因为 Android 不允许。但是我在这里看到很多人建议使用 abortBroadcast() 来阻止短信,而且我知道市场上有一些短信拦截器应用程序实际上可以阻止短信。我不知道他们是否在使用 abortbroadcast。

有什么想法吗?

【问题讨论】:

  • 如果您有解决方案,请接受/UpVote 答案:)
  • 我想我得到了答案,“从 Android 1.6 开始,传入的 SMS 消息广播 (android.provider.Telephony.SMS_RECEIVED) 以“有序广播”的形式传递——这意味着您可以告诉系统哪些组件应该首先接收广播。”我使用的是Android 1.5 并且广播是无序的!感谢这里的这个人 [link] (stackoverflow.com/questions/419184/…)

标签: android sms broadcastreceiver messaging


【解决方案1】:

“从 Android 1.6 开始,传入的 SMS 消息广播 (android.provider.Telephony.SMS_RECEIVED) 以“有序广播”的形式传递——这意味着您可以告诉系统哪些组件应该首先接收广播。”我使用的是Android 1.5 并且广播是无序的!

感谢这里的这个人link

【讨论】:

    【解决方案2】:

    它是否显示来自接收器的 Toast?可能您的 Receiver 未在 Manifest 中正确注册。

    尝试改变,

    <receiver android:name="SMSMonitor">
    

    <receiver android:name=".SMSMonitor">
    

    【讨论】:

      【解决方案3】:

      你一定可以做到,你写的代码非常好,

      尝试将优先级从 &lt;intent-filter android:priority="9999999"&gt; 更改为 &lt;intent-filter android:priority="99999999"&gt; ,基本上比你给的优先级更高,然后尝试检查。

      【讨论】:

      • 感谢您的回复,但这似乎没有帮助。而且我想如果我的应用程序错过了广播,就不会出现错误,只会出现通知。我认为有一个与有序或无序广播相关的问题。
      猜你喜欢
      • 1970-01-01
      • 2011-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-02
      相关资源
      最近更新 更多