0

给定各种过滤参数,我的应用程序正在搜索数据。该数据是从多个来源(即 Internet 上的多个站点)获取的。我希望其他开发人员能够实现他们自己的数据源,这样他们就可以将它们“插入”到我的应用程序中,而无需我进行任何操作。

实现这一目标的最佳方法是什么?尤其:

  1. 外部开发人员应该怎么做才能使他们的实现对我的流程可见?
  2. 我如何发现这样的外部实现?
  3. 一旦发现,我可以使用什么作为这些实现中的每一个的标识符?
  4. 如何与外部实现的各种“方法”进行通信。

我最好的猜测是使用服务:

  1. 让外部开发人员使用具有指定 URI的意图过滤器设置他们的服务。
  2. 使用PackageManager #queryIntentServices 方法列出与指定 URI 匹配的所有服务。
  3. 使用他们的包名作为标识符,所以我可以直接在那个包上启动意图。
  4. 相信外部开发人员会倾听并正确响应我的文档中指定的所有意图。我会将 PendingIntent 或 Messenger 对象传递给它们以获取结果。

我还没有尝试过,我是 Android 的初学者。这是正确的方法吗?

4

1 回答 1

1

让外部开发人员使用具有指定 URI 的意图过滤器设置他们的服务。

使用 PackageManager#queryIntentServices 方法列出与指定 URI 匹配的所有服务。

如果“URI”是指“动作”,这当然是一种方法。

使用他们的包名作为标识符,所以我可以直接在那个包上启动意图。

是的。

相信外部开发人员会倾听并正确响应我的文档中指定的所有意图。我会将 PendingIntent 或 Messenger 对象传递给它们以获取结果。

那些会起作用的。我倾向于 PendingIntent。

这是正确的方法吗?

::耸肩::

“妥”,如同真与美,存在于旁观者的眼中。

(希望不是那个旁观者——那些事情很讨厌)

您的方法本质上没有任何问题。我可能会做同样的事情,以我上面的评论为模。

一些替代方案:

  • 相同的策略,但让服务导出一个与 AIDL 的绑定接口,并将您的主机绑定到它们(优点:更丰富的 API,缺点:设置起来更痛苦,特别是如果您的主机是一个活动)

  • 插件是ContentProviders,您通过权威命名约定或某些引导方法发现的

  • 插件确实通过广播与您交流Intents(如果主要数据流是它们向您推送数据而不是您从它们中提取数据,则效果很好)

于 2012-04-27T11:29:19.493 回答