任何人都可以提供一些提示,为什么这个广播接收器会收到多个意图?示例I仅发送一个短信但广播接收器多次接收它。
我已经检查了这个帖子但没有运气 Getting multiple broadcasts from intents? BroadCastReceiver for Multiple sent Messages?
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);
}
}
答案 0 :(得分:0)
在我添加了一行来取消注册我的broadcastreceiver后,结果是一样的,直到我将我的模拟器升级到Android 4.1.2。似乎Android 2.3.3上存在一个错误。这个问题现在已经解决了。
context.unregisterReceiver(this);
答案 1 :(得分:0)
我在接收多个不需要的广播时遇到了类似的问题。
在我的情况下,我在我的孩子活动的onCreate()中注册了一个BroadcastReceiver,但是在活动关闭时从未取消注册。因此,当我的父活动再次启动子活动时,发生了新的注册,而不是1次广播,我得到2,3等等。
通过将registerReceiver放入onResume()并将unregisterReceiver放入onPause来解决问题。
此外,如果您使用LocalBroadcastManager.registerReceiver,请不要忘记使用LocalBroadcastManager.unregisterReceiver,而不仅仅是unregisterReceiver,否则您将获得java.lang.IllegalArgumentException:Receiver not registered