如何为其他开发人员提供api使用

时间:2014-07-05 21:08:44

标签: android

如何实施API,以便其他开发人员可以添加自定义视图,主题,具有新功能的完整模块,并可以访问我的应用中的对象?

就我而言,Api适用于绘图应用程序。我想支持以下内容:

  • 自定义绘图工具,f.e。直线,虚线。还应支持编辑直线的起点和终点。
  • 使用菜单条目添加像刀具一样的新工具
  • 添加对其他文件格式的支持
  • 主题支持
  • 访问所有图纸(内容提供商)
  • 获取当前打开的文档列表
  • 打开文件

3 个答案:

答案 0 :(得分:1)

应用可以广播其他应用可以接收的Intent。这些意图可以包含您希望在两者之间传递的各种形式的信息。

因此,您可以定义其他应用可以实施的一组Intent操作。

您的应用可以搜索实施这些操作的其他任何人,并在需要时调用它们。

这允许其他开发人员为您的应用编写模块,并且您可以控制在您的应用和另一个应用之间传递的数据。

The answer by j__m似乎暗示了这种方法。


注意通过这样的API对外部模块进行过多控制。如果您允许第三方应用程序控制您自己的对象,则存在明显的安全问题。

查看这些问题以进行相关讨论:


您可能还希望了解如何实施Service来处理这些请求,具体取决于此API的使用方式。

这将允许您的应用处于有效状态,但不可见。

接收BroadcastReceiver广播的API Intent类可以调用Service来处理命令或请求。

答案 1 :(得分:1)

使用PackageManager查找应被视为您的扩展程序的应用程序。你可以用各种方式做到这一点。例如,您可以使用PackageManager.queryIntentActivities()查找包含处理特定意图的活动的所有应用。或者,您可以使用PackageManager.getInstalledPackages()列出设备上的所有应用,然后按包名,元数据查找扩展名,是否持有您定义的权限等。

找到您的扩展程序后,您需要决定如何与它们进行互动。最安全的机制是使用意图来调用其他应用程序提供的活动,接收器或服务。

根据您要求的内容 - 对对象和视图的任意访问 - 您可能更愿意使用DexClassLoader将其他应用的代码直接加载到您的流程中;这让其他应用程序可以随心所欲,包括创建视图,更改外观等等。它还允许其他应用程序使用您的所有程序包权限,因此您肯定希望让用户知道另一个应用程序具有这种访问权限。正如我之前提到的,你可以定义一个权限,例如"充当我的应用程序的插件"并要求其他应用程序列出该权限以便加载。

答案 2 :(得分:0)

如果它只是java文件,那么您可以将其打包为jar文件以进行分发。

如果你有xml个包含布局,维度和其他资源的文件,那么最好在eclipse中创建一个android项目,或者只是一个简单的eclipse java项目,并从Project Properties中标记它Is Library。您可以在github上托管这些文件。