0

我正在尝试创建一个具有某些工厂基本功能的系统。

我希望第 3 方开发人员能够使用他们自己的代码扩展此功能。

这旨在通过在我希望 3rd 方应用程序接收它可以使用的数据的某些情况下触发广播来工作。

这个系统可以工作,但我遇到的问题是,从 3.1 版开始,应用程序需要由用户运行才能启用广播接收器。我希望我可以让这些插件在没有启动器/默认活动的情况下存在,这样用户就不需要用插件图标堵塞他们的启动器。将为设置定义额外的活动,但这将从我的应用程序生态系统中调用。

tl;dr:如何在新安装的应用程序中启用广播接收器,尽可能少的用户干预(理想情况下,不位于启动器中)。

4

2 回答 2

1

AFAIK,Android 3.1+ 限制是隐式的Intents。显式Intents- 您设置ComponentName接收器的位置 - 应该可以正常工作。

所以,现在的问题变成了:你是如何真正与多个插件进行通信的?

如果您的意图是发送一个每个人都可以接收的广播,那将会遇到 Android 3.1 问题。您需要自己直接调用第三方应用程序中的某个组件来启用它,例如通过显式从您的 UI 启动其活动之一Intent,或通过显式直接向其组件之一发送广播Intent

如果您的意图是专门向单个插件发送广播,那么您已经有了某种发现插件的方法(例如,监视添加的包并查找带有某些 . 的组件<meta-data>)。在这种情况下,您可以安排派生Intent要使用的显式(例如,它是带有 的组件<meta-data>)并且应该能够显式地向它广播。

如果您发现Intents由于 Android 3.1“停止状态”限制而导致显式不起作用,请告诉我,因为我想做更多调查。

于 2013-04-12T14:13:10.743 回答
0

哦,我不知道这个新的安全功能。真倒霉……

但是现在我了解了问题的细节,我会建议一个答案,但不确定它是否会起作用,你必须自己测试它。

也许您可以在您的应用程序上接收PACKAGE_ADDED 广播,在此接收器上,您将查询包管理器以获取此新添加的包并检查它是否具有用于您的广播的意图过滤器,如果有,那么您的应用程序应该显式启动该第 3 方应用程序的某些组件,因此可以通过 3.1 系统限制“初始化”。

这可能意味着您需要更改与 3rd 方开发人员的交互,以便他们拥有您的应用程序始终可以触发的标准组件,但这似乎是一种可行的解决方法。

于 2013-04-12T14:16:05.213 回答