Android 在广播接收器上获取不需要的多个意图

Android 在广播接收器上获取不需要的多个意图,android,broadcastreceiver,Android,Broadcastreceiver,有人能给出一些提示,为什么这个广播接收器接收到多个意图?例如,我只发送了一条短信,但广播接收器多次收到 我已经检查过了,但是运气不好 public void sendMultipart(字符串msgbody、字符串msg\u receipents、Intent) { 意向意向文本RA=新意向(“短信发送”); intentExtra.putExtra(“电话号码”,消息接收者); intentExtra.putExtra(“msgbody”,msgbody); 悬垂式sentPI= Pendi

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

我已经检查过了,但是运气不好

public void sendMultipart(字符串msgbody、字符串msg\u receipents、Intent)
{
意向意向文本RA=新意向(“短信发送”);
intentExtra.putExtra(“电话号码”,消息接收者);
intentExtra.putExtra(“msgbody”,msgbody);
悬垂式sentPI=
PendingEvent.getBroadcast(MyApplication.getAppContext(),
smsID++,intentExtra,pendingent.FLAG_CANCEL_CURRENT);
BroadcastReceiver smsStatusReceiver=新的BroadcastReceiver()
{
@凌驾
公共void onReceive(上下文、意图)
{
字符串phoneNumber=intent.getStringExtra(“phoneNumber”);
字符串消息=intent.getStringExtra(“消息”);
int resultCode=getResultCode();
开关(结果代码)
{
案例活动。结果\u正常:
Logger.logtoFile(标记“结果正常”+电话号码,1);
打破
案例smsmsmanager.RESULT\u错误\u一般\u失败:
Logger.logtoFile(标记“结果错误\通用错误”+电话号码,1);
打破
案例smsmsmanager.RESULT\u错误\u否\u服务:
Logger.logtoFile(标签“结果错误服务”+电话号码,1);
打破
案例smsmsmanager.RESULT\u ERROR\u RADIO\u OFF:
Logger.logtoFile(标记“结果错误无线电关闭”+电话号码,1);
打破
}
}
};
MyApplication.getAppContext().registerReceiver(smsStatusReceiver,新的意向过滤器(“SMS_发送”);
尝试
{
SmsManager sms=SmsManager.getDefault();
arraylistmessages=sms.divideMessage(msgbody);//将消息分成块
ArrayList sentinents=新的ArrayList();
sentinents.add(sentPI);
对于(int j=0;j
在我添加了一行代码来注销我的broadcastreceiver之后,结果还是一样的,直到我将emulator升级到Android 4.1.2。Android 2.3.3上似乎有一个bug。这个问题现在已经解决了

context.unregisterReceiver(this);

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

在我的例子中,我在子活动的onCreate()中注册了BroadcastReceiver,但在活动关闭时从未注销它。因此,当我的父活动再次启动子活动时,出现了一个新的注册,我得到的不是1次广播,而是2次,3次,以此类推

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

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

context.unregisterReceiver(this);