我们有一个基于标签的应用程序,需要支持客户添加自己的插件标签的能力。启动我们的应用程序时,我需要了解插件,以便我可以创建选项卡,将其放在正确的位置,标记它,为其分配图标并启动插件活动作为其内容。看来这是我需要做的数据:
这些是我考虑过的一些选项:
插件服务。这将要求每个插件活动都有相关的服务。然后,我将使用PackageManager.queryIntentServices()来查找具有已知接口的插件服务,然后通过该接口请求有关活动的信息。
插件意图过滤查询。我不确定这是否可能,但我们的想法是将我需要的数据存储在插件活动的Intent Filter中。我将使用PackageManager.queryIntentActivities()来查找插件活动和ResolveInfo的过滤器字段以获取有关过滤器的信息。但是,我没有关于如何在Intent Filter中存储/检索该信息的详细信息。
配置数据。在C ++世界中,这些数据将被放置在一个XML配置文件中,该文件在启动时由应用程序读入。这需要在添加插件时修改配置。在我们的情况下,这并不是什么大问题,因为我们的定位设备是我们的主要应用程序。但我仍然喜欢动态地做。这些数据在Android上的位置是什么?
那么有没有人有关于如何做到这一点的任何建议?还有哪些其他解决方案?什么是最有效的?
你可能会说,我是Android新手。我已尽力找到实施此方法的方法,但我可能会超出Android的预期标准。
答案 0 :(得分:1)
查看Locale does plugins的方式(通过意图)。对于发现,他们使用意图过滤器,使用匹配活动的android:name
和android:icon
属性显示在Locale插件列表中。这是一个非常漂亮的系统,他们有文档和示例代码。
就处理您应用中的数据而言,您可能希望阅读ResolveInfo
和PackageManager
的queryIntentActivityOptions
来电。
答案 1 :(得分:0)
我认为最简单的方法是使用有序广播:http://developer.android.com/reference/android/content/Context.html#sendOrderedBroadcast
这样,广播接收者可以将信息传递回发送者。在结果中放置标签,优先级和Intent应该很容易,但对于Icons,您可能必须使用ContentProvider
。
[编辑] 如果图标和标签与活动相匹配,Yoni的回答可能是一个更好的主意。您应该能够使用元数据传递优先级:http://developer.android.com/guide/topics/manifest/meta-data-element.html