3

谁能给出一些提示,为什么这个广播接收器会收到多个意图?示例我只发送了一条短信,但广播接收器收到了多次。

我已经检查了这个线程但没有运气 从意图中获取多个广播? 多个发送消息的广播接收器?

public void sendMultipart(String msgbody, String msg_receipients, Intent intent)
{
    Intent intentExtra = new Intent("SMS_SENT");

    intentExtra.putExtra("phoneNumber", msg_receipients);
    intentExtra.putExtra("msgbody", msgbody);

    PendingIntent sentPI =
        PendingIntent.getBroadcast(MyApplication.getAppContext(),
            smsID++, intentExtra, PendingIntent.FLAG_CANCEL_CURRENT);

    BroadcastReceiver smsStatusReceiver = new BroadcastReceiver()
    {
        @Override
        public void onReceive(Context context, Intent intent)
        {
            String phoneNumber = intent.getStringExtra("phoneNumber");
            String message = intent.getStringExtra("message");

            int resultCode = getResultCode();

            switch (resultCode)
            {
                case Activity.RESULT_OK:
                    Logger.logtoFile(tag,"RESULT_OK "+phoneNumber,1);
                    break;
                case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                    Logger.logtoFile(tag,"RESULT_ERROR_GENERIC_FAILURE "+phoneNumber,1);
                    break;
                case SmsManager.RESULT_ERROR_NO_SERVICE:
                    Logger.logtoFile(tag,"RESULT_ERROR_NO_SERVICE "+phoneNumber,1);
                    break;
                case SmsManager.RESULT_ERROR_RADIO_OFF:
                    Logger.logtoFile(tag,"RESULT_ERROR_RADIO_OFF "+phoneNumber,1);
                    break;
            }
        }
    };
    MyApplication.getAppContext().registerReceiver(smsStatusReceiver, new IntentFilter("SMS_SENT"));

    try
    {
        SmsManager sms = SmsManager.getDefault();
        ArrayList<String> messages = sms.divideMessage(msgbody); //Divide msg into chunk
        ArrayList<PendingIntent> sentIntents = new ArrayList<PendingIntent>();
        sentIntents.add(sentPI);
        for (int j = 0; j < messages.size(); j++) {
            sentIntents.add(PendingIntent.getBroadcast(MyApplication.getAppContext(),0,intent, 0));
            sentIntents.add(null);
        }
        sms.sendMultipartTextMessage(msg_receipients, null, messages, sentIntents, null);
    } catch(Exception l) {
        Logger.logtoFile(tag, l.toString(), 2);
    }
}
4

2 回答 2

2

我在接收多个不需要的广播时遇到了类似的问题。

在我的情况下,我在我的子活动的 onCreate() 中注册了一个 BroadcastReceiver,但在活动关闭时从未取消注册它。因此,当我的父活动再次启动子活动时,发生了新的注册,而不是 1 广播我得到了 2,3 等等。

通过将 registerReceiver 放入 onResume() 并将 unregisterReceiver 放入 onPause 解决了这个问题。

另外,如果你使用 LocalBroadcastManager.registerReceiver,不要忘记使用 LocalBroadcastManager.unregisterReceiver,而不仅仅是 unregisterReceiver,否则你会得到一个 java.lang.IllegalArgumentException: Receiver not registered

于 2016-11-13T15:18:26.930 回答
1

在我添加了一行来取消注册我的广播接收器之后,结果是一样的,直到我将我的模拟器升级到 Android 4.1.2。Android 2.3.3 似乎存在错误。这个问题现在解决了。。

context.unregisterReceiver(this);
于 2013-05-18T06:48:12.630 回答