在 android 中从 BroadcastReceiver 注销单个 IntentFilter

Unregistering single IntentFilter from BroadcastReceiver in android

我正在将许多 IntentFilter 注册到一个 BroadcastReceiver 并注销所有 IntentFilter,当这些不需要时,如下面的代码所示。

目前一切正常。但是现在我需要取消注册一个 IntentFilter 而不是全部。

如何实现这一目标或任何解决方法或更好的方法?

private void registerBroadcastReceiver() {
        Log.i(TAG, LogHelper.at() + "Begin");

        LocalBroadcastManager
                .getInstance(getActivity())
                .registerReceiver(broadcastReceiver,
                        new IntentFilter(getString(R.string.onInitiateCustomerVerificationSUCCESS)));

        LocalBroadcastManager
                .getInstance(getActivity())
                .registerReceiver(broadcastReceiver,
                        new IntentFilter(getString(R.string.onInitiateCustomerVerificationFAILURE)));

        Log.i(TAG, LogHelper.at() + "End");
    }

    private void unRegisterBroadcastReceiver() {
        Log.i(TAG, LogHelper.at() + "Begin");

        LocalBroadcastManager
                .getInstance(OkeKeyApplication.getAppContext())
                .unregisterReceiver(broadcastReceiver);

        Log.i(TAG, LogHelper.at() + "End");
    }

没有这样的方法,但您可以按照以下方式之一进行 -

  1. 为那个特定的 IntentFilter 注册一个不同的接收器,并在需要时注销它。不会影响其他注册的接收者。

  2. 注销接收器,然后同时再次注册同一个接收器,但仅限于其余的 IntentFilters。

通过添加操作来定义 IntentFilter。那么你只能注册一次接收器。

IntentFilter filter = new IntentFilter();
filter.addAction(getString(R.string.onInitiateCustomerVerificationSUCCESS));
filter.addAction(getString(R.string.onInitiateCustomerVerificationFAILURE));
LocalBroadcastManager.getInstance(getActivity())
    .registerReceiver(broadcastReceiver, filter);

要更改 IntentFilter,我只需注销它,然后使用新的 IntentFilter 重新注册。