gpt4 book ai didi

java - 多次注册到同一接收器

转载 作者:太空狗 更新时间:2023-10-29 14:00:28 28 4
gpt4 key购买 nike

出于某种原因,我需要多次注册到同一个接收器,就像在 list 中注册一次,在代码中注册一次。即使应用程序未运行但已安装,我也想听包更改。

1.在AndroidManifest.xml中

<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>

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

public PackageChangeReceiver(@ForApplication Context context) {
super();
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);
}

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

最佳答案

我找到了解决方案。 Marshmallow 不允许对同一个广播接收器进行多次注册。但如果操作系统版本小于或等于 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);
}

关于java - 多次注册到同一接收器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35953699/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com