多次注册到同一个接收器

时间:2016-03-12 04:19:32

标签: java android broadcastreceiver

出于某种原因,我需要多次注册到同一个接收器,如Manifest中的一个和代码中的一次。我想听包更改,即使应用程序没有运行但已安装。

1.在AndroidManifest.xml中

Error in .summary.object$coefficients : $ operator is invalid for atomic vectors

2.在代码中,我在构造函数中使用以下代码片段注册到BroadcastReceiver。

<receiver android:name="PackageChangeReceiver">
    <intent-filter>
        <action android:name="android.intent.action.PACKAGE_CHANGED" />
        <action android:name="android.intent.action.PACKAGE_ADDED" />
        <action android:name="android.intent.action.PACKAGE_REMOVED" />
        <action android:name="android.intent.action.PACKAGE_REPLACED" />
        <data android:scheme="package" />
    </intent-filter>

但不知怎的,Android只会在收到两者时间歇地收到其中一个。新版本中是否有任何文档,例如Android OS本身的性能改进,例如虽然多次注册但只收到一个广播。它是设备或操作系统或版本特定的东西吗?

1 个答案:

答案 0 :(得分:1)

我找到了解决方案。棉花糖不允许多次注册到同一个广播接收器。但如果OS版本小于或等于LOLLIPOP_MR1,则可以容忍注册到同一广播接收器。 但由于Marshmallow(API 23)不允许这样做,我们可以做到这样的性能改进。

private static final boolean REGISTER_DUPLICATE_RECEIVER = VERSION.SDK_INT <= VERSION_CODES.LOLLIPOP_MR1;

if (REGISTER_DUPLICATE_RECEIVER) {
        IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED);
        filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
        filter.addAction(Intent.ACTION_PACKAGE_CHANGED);
        filter.addDataScheme("package");
        context.registerReceiver(this, filter);
    }