如何让一个 android 应用程序向另一个应用程序发送消息以在 android O 中启动它?

How can I have one android app send a message to another to start it up in android O?

在 android O 之前,我能够根据第一个应用程序的操作触发第二个姊妹应用程序的功能。我通过向第二个应用程序发送一个在第二个应用程序中定义为广播接收器的意图来做到这一点。都一样。

但显然从 api 26 开始,清单中定义的任何不是特定系统的广播接收器(即像我这样的特定于应用程序的接收器)都会被忽略。我在 logcat 中收到错误,我忘记了细节。

我能想到的让它工作的唯一方法是让第二个应用程序在启动时启动(广播接收器似乎仍然工作)并启动一个以编程方式安装广播接收器的服务,并且该服务保持足够的应用程序活动以接收这些消息。

我还没有尝试过,因为这似乎有点矫枉过正,而且非常耗费资源,只是为了接收做某事的意图。

是否有任何其他机制可以使这项工作正常进行?

谢谢。

But apparently as of api 26, any broadcast receivers defined in the manifest that aren't particular system ones (ie, app specific ones like mine) get ignored

不正确。你误解了限制。

自 API 26 起,您无法再接收 隐式 带有清单声明接收器的广播。但是,显式 广播除外。

在您的 Intent 中明确定位接收者:

Intent intent = new Intent("my_action");
intent.setComponent(new ComponentName("com.sister.packagename", "com.sister.packagename.Receiver");
sendBroadcast(intent);

您显然需要使用自己的操作和正确的 package/class 名称,但这将允许您保留清单定义的接收器。

不过,请确保您正在检查接收方 onReceive() 方法中的操作。通过发送显式广播,Android 会忽略您的意图过滤器并发送意图。