Android BroadcastReceiver onReceive调用了3次而不是一次

Android BroadcastReceiver onReceive调用了3次而不是一次,android,broadcastreceiver,android-alertdialog,Android,Broadcastreceiver,Android Alertdialog,在我的onMessageReceived()方法中收到推送通知后,我发送广播 在BroadcastReceiver的onReceive()方法中,我想显示一个AlertDialog,允许用户移动到另一个片段 问题是我的onReceive()方法被调用了3次,而不是1次,并且我的AlertDialog打开了3次 我试过这样的方法: private int onReceiveCalledIndex = 0; @Override public void onReceive(Context c

在我的
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\u接收:0

E/DEBUG\u接收:0

E/DEBUG\u接收:0


有人请告诉我一种方法,使
onReceive()
只调用一次或处理一次,这样我将只打开一个对话框。

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

登记用途:

this.registerReceiver(broadCastReceiver, new IntentFilter(droid.intent.action.TIME_TICK'));
注销:-

this.unregisterReceiver(broadCastReceiver);

如果您从活动中注册接收者而不是从片段中注册接收者,那么一切都可以正常工作


谢谢您的帮助。

请确保您只注册了一次广播接收器。最好在活动的onResume中注册广播接收器,然后在OnDestroyc中注销它。您可以发布onMessageReceived()的片段吗?