我有一个包含6个应用的项目。当一个应用收到通知时,其他五个应用也会通过隐式广播接收器得到通知。
但在android Oreo隐式广播接收器中已被弃用。所以我无法一起通知其他5个应用。
无论如何我可以在android oreo中执行相同的功能吗?
答案 0 :(得分:3)
引用自己,从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
吗?如果您的流程如何,那该怎么办? 在广播循环完成之前终止?)。