BroadcastReceiver onReceive调用3次而不是1次

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BroadcastReceiver onReceive调用3次而不是1次相关的知识,希望对你有一定的参考价值。

我在notification方法中推送onMessageReceived()后发送广播。

在BroadcastReceiver的onReceive()方法中,我想显示一个允许用户移动到另一个片段的AlertDialog

问题是我的onReceive()方法被调用3次,而不是1次,而我的AlertDialog被打开3次。

我尝试过类似的东西:

private int onReceiveCalledIndex = 0;

@Override
    public void onReceive(Context context, Intent intent) {
        if(intent.getExtras() != null)
        {
            String requestIdString = (String) intent.getExtras().get(Constants.PUSH_NOTIFICATION_CHAT_PUT_EXTRA);
            Log.e("DEBUG_RECEIVE",String.valueOf(onReceiveCalledIndex));
            onReceiveCalledIndex += 1;
            if(onReceiveCalledIndex == 2 ) showNewMessageDialog(requestIdString);
        }
    }

但我得到这些日志,我的索引永远不会增加。就像这个方法同时在三个不同的线程上调用...

E / DEBUG_RECEIVE:0

E / DEBUG_RECEIVE:0

E / DEBUG_RECEIVE:0

有人请告诉我一种方法,让onReceive()只被调用一次或处理,所以我只打开一个对话框。

答案

动态注册和取消注册广播接收器

注册使用: -

this.registerReceiver(broadCastReceiver, new IntentFilter(droid.intent.action.TIME_TICK'));

取消注册: -

this.unregisterReceiver(broadCastReceiver);
另一答案

它接缝,如果你从活动内注册接收器而不是片段,所有工作正常。

感谢帮助。

以上是关于BroadcastReceiver onReceive调用3次而不是1次的主要内容,如果未能解决你的问题,请参考以下文章

BroadcastReceiver 是不是只监听变化?

为啥 BroadcastReceiver 需要一个默认构造函数?

Android中BroadcastReceiver组件具体解释

Android_组件_BroadcastReceiver基础

转Android BroadcastReceiver介绍

赵雅智_BroadcastReceiver