我正在尝试创建一个我具有某些工厂基本功能的系统。
我希望第三方开发人员能够使用自己的代码扩展此功能。
这是为了在某些情况下启动广播,我希望第三方应用程序接收可以使用的数据。
这个系统有效,但我遇到的问题是,从版本3.1开始,App需要由用户运行才能启用BroadcastReceivers。我希望我可以让这些插件在没有启动器/默认活动的情况下存在,这样用户就不需要用插件的图标来阻塞他们的启动器。将为设置定义额外活动,但这将从我的应用程序生态系统中调用。
TL; DR: 如何在新安装的应用程序中启用BroadcastReceiver,尽可能少用户干预(理想情况下,不要位于启动器中)。
答案 0 :(得分:1)
AFAIK,Android 3.1+限制适用于隐式Intents
。显式Intents
- 你设置接收者的ComponentName
- 应该没有问题。
所以,问题现在变成:你是如何真正与多个插件进行通信的?
如果您的目的是发送每个人都可以收到的单个广播,那将会超过Android 3.1问题。您需要自己直接调用第三方应用程序中的某个组件来启用它,例如通过显式Intent
从UI启动其中一个活动,或者直接通过一个组件向其中一个组件发送广播。明确的Intent
。
如果您打算专门向各个插件发送广播,那么您已经有了一些发现插件的方法(例如,监控添加的包并查找具有特定<meta-data>
的组件)。在这种情况下,您可以安排导出要使用的显式Intent
(例如,它是带有<meta-data>
的组件),并且应该能够明确地向其广播。
如果您发现由于Android 3.1“停止状态”限制而导致显式Intents
无效,请告诉我,因为我想进行更多调查。
答案 1 :(得分:0)
但是现在我明白了这个问题的细节,我会得到一个答案,但不确定它会起作用,你必须自己测试一下。
也许您可以在您的应用上收到PACKAGE_ADDED broadcast,在此Receiver上,您将向包管理器查询此新添加的包并检查它是否具有广播的intent-filter,如果有,然后你的应用程序应该明确启动该第三方应用程序的一些组件,因此可以通过3.1系统限制“初始化”。
这可能意味着您需要更改与第三方开发人员的互动,以便他们拥有您的应用可以随时触发的标准组件,但这似乎是一种可行的解决方案。