【问题标题】:Implicit Broadcast in android Oreoandroid Oreo 中的隐式广播
【发布时间】:2018-04-29 10:17:26
【问题描述】:

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

但在 android Oreo 中,隐式广播接收器已被弃用。所以我不能同时通知其他 5 个应用程序。

反正我可以在 android oreo 中做同样的功能吗?

【问题讨论】:

  • 只是为了闪烁一些灯阅读This blog。您可能会找到解决方案。

标签: 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 的报复。你可以尝试介绍一些 循环内的广播之间的延迟,以分散影响。然而, 如果您将其分散超过几秒钟,这将开始变得棘手 (例如,您现在是否需要IntentServiceWakeLock?如果您的流程 在广播循环完成之前终止?)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多