android Oreo

时间:2018-04-29 10:17:27

标签: android broadcastreceiver android-8.0-oreo

我有一个包含6个应用的项目。当一个应用收到通知时,其他五个应用也会通过隐式广播接收器得到通知。

但在android Oreo隐式广播接收器中已被弃用。所以我无法一起通知其他5个应用。

无论如何我可以在android oreo中执行相同的功能吗?

1 个答案:

答案 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可能会遭到报复。您可以尝试介绍一些   广播之间的延迟,在循环内部,以分散影响。然而,   如果你把它展开超过几秒钟,这就开始变得棘手了   (例如,您现在需要IntentServiceWakeLock吗?如果您的流程如何,那该怎么办?   在广播循环完成之前终止?)。