允许其他人为我的应用开发插件

时间:2014-11-17 16:59:08

标签: java android plugins

我正在使用应用抽屉中的搜索功能开发a home screen replacement for Android。我不仅希望允许(不强制)用户搜索已安装的应用程序,还要搜索Stack Overflow,Wikipedia或其本地文件等其他内容。

目前我正在开发这些所谓的"镜片"我自己,但我认为如果其他人也可以开发它们,这将是一个很酷的主意。所以我想知道的是,是否有任何方式允许其他开发人员这样做;为我的应用开发额外的镜头。

所有镜片都应该继承以下课程;

Lens.java

public abstract class Lens
{
    protected Context context;

    protected Lens (Context context)
    {
        this.context = context;
    }

    public abstract List<LensSearchResult> search (String str) throws IOException, JSONException;

    public abstract String getName ();

    public abstract String getDescription ();

    public void onClick (String url)
    {
        if (url.startsWith ("http://") || url.startsWith ("https://"))
        {
            Intent intent = new Intent (Intent.ACTION_VIEW);
            intent.setData (Uri.parse (url));

            this.context.startActivity (intent);
        }
        else
        {
            throw new UnsupportedOperationException ();
        }
    }

    public void onLongPress (String url)
    {
    }

    protected String downloadStr (String url) throws IOException, JSONException
    {
        // Not important. Provided for convenience.
    }

    protected Drawable downloadImage (String url) throws IOException, JSONException
    {
        // Not important. Provided for convenience.
    }
}

开发人员应将Context从其构造函数传递给超类,实现List<LensSearchResult> search (String str)String getName ()String getDescription ()。如果我们正在谈论网址,那就是他们需要做的全部事情。否则,他们也应该覆盖void onClick (String url),如果他们希望这样做void onLongPress (String url) 这基本上就是一个&#34; Lens&#34;将包括。

那么我必须做些什么(如果可能的话)让其他开发人员能够创建&#34;镜头&#34;对于我的应用?理想情况下,他们可以将它们分发到Google Play商店,但如有必要,我可以开发自己的平台,其他人可以上传他们的镜头。无论哪种方式,我仍然需要一些方法来从我的应用程序中运行别人的代码。

2 个答案:

答案 0 :(得分:3)

  

如果你能想到一个更好的方式(也许就像DashClock那样),我全都听见了:)

围绕IPC设计您的API。让第三方插件实现您的主机应用使用的ServiceContentProvider和/或BroadcastReceiver。虽然使用AIDL的绑定服务似乎是将现有API转换为使用IPC的绑定服务的最自然方式,但插件的绑定服务具有各种各样的问题(例如,API版本控制),这些问题随着时间的推移而变得混乱。 / p>

在您自己的应用程序中,您可以将低级IPC管道包装在一些类似于现有API的类中。如果您希望第三方开发人员使用您发布的某些库来让他们创建插件,那么欢迎您这样做。您需要自己创建一些插件,以测试您的API并为第三方开发人员提供示例。

鉴于所有这些,在安装和删除插件时,您可以发现许多方法。例如,ACTION_PACKAGE_ADDEDACTION_PACKAGE_REMOVED广播可以告诉您何时添加和删除其他应用。然后,您可以使用PackageManager查看它们是否是您的插件之一(例如,它们是否实现了您的IPC端点?)。或者,使用像PackageManager这样的queryIntentServices()方法来轮询插件实现,如果这更有意义的话。

答案 1 :(得分:0)

使用插件的实际应用可能会为您提供想法。以下是使用它们的应用程序的插件开发者页面:

http://www.twofortyfouram.com/developer