【问题标题】:Implicit Broadcast in android Oreoandroid Oreo 中的隐式广播
【发布时间】:2018-04-29 10:17:26
【问题描述】:
我有一个包含 6 个应用程序的项目。当一个应用收到通知时,其他五个应用也会通过隐式广播接收器获得通知。
但在 android Oreo 中,隐式广播接收器已被弃用。所以我不能同时通知其他 5 个应用程序。
反正我可以在 android oreo 中做同样的功能吗?
【问题讨论】:
标签:
android
broadcastreceiver
android-8.0-oreo
【解决方案1】:
引用我自己的话,来自the blog post 链接到来自a comment:
如果你是发送隐式广播,你可以通过
找到接收者并发送单独的显式广播:
private static void sendImplicitBroadcast(Context ctxt, Intent i) {
PackageManager pm=ctxt.getPackageManager();
List<ResolveInfo> matches=pm.queryBroadcastReceivers(i, 0);
for (ResolveInfo resolveInfo : matches) {
Intent explicit=new Intent(i);
ComponentName cn=
new ComponentName(resolveInfo.activityInfo.applicationInfo.packageName,
resolveInfo.activityInfo.name);
explicit.setComponent(cn);
ctxt.sendBroadcast(explicit);
}
}
不幸的是,这会导致流程流失,如果很多开发人员
这样做,可能会遭到 Google 的报复。你可以尝试介绍一些
循环内的广播之间的延迟,以分散影响。然而,
如果您将其分散超过几秒钟,这将开始变得棘手
(例如,您现在是否需要IntentService 和WakeLock?如果您的流程
在广播循环完成之前终止?)。