0

HTML5 GUI を使用して phonegap アプリを構築するために、Android 用の Cordova プラグインを作成しました。

私もネイティブ インターフェイスを持ちたいと思っており、ネイティブ UI 用にプラグインを再利用するための最も適切なオプションは何か疑問に思っていました。基本的に、phonegap (HTML5) インターフェイスを備えたアプリとネイティブ Android インターフェイスを備えたアプリの 2 つのアプリが必要です。どちらも Cordova プラグインを使用しています。

プラグインはクラスを拡張するため、 http://docs.phonegap.com/en/2.3.0/guide_pluginで説明されているようCordovaPluginに、の javascript から次のメソッドを呼び出さずに使用する方法がわかりません。-development_android_index.md.htmlWebView

exec(<successFunction>, <failFunction>, <service>, <action>, [<args>]);

WebView:を経由せずに、プラグインのネイティブ側を呼び出したいだけです。

@Override
public boolean execute(String action, JSONArray args,
        CallbackContext callbackContext) throws JSONException { ... }

プラグインからコードをかなり簡単に適応させることができれば、フロントエンド/バックエンドの分離を改善するためにプラグインをまったく同じままにする方法を見つけたいと思います (複製する必要なく 1 つのアプリでコードを変更できます)他のアプリでそれを)。

これはまったく可能ですか?これが Cordova プラグインのポイントではないことは理解していますが、それを回避する方法を見つけたいと考えています。

ありがとう。

4

1 に答える 1

1

私の意見では、あなたは適用する必要がありますFacade pattern

http://en.wikipedia.org/wiki/Facade_pattern

ビジネス ロジックを Cordova プラグインから呼び出した専用クラスに抽出し、MyFacade背後にあるすべてのビジネス ロジックを非表示にするだけです。

もう 1 つの方法は、次のようにすることです。

MyCordovaPlugin myPlugin = new MyCordovaPlugin();
myPlugin.execute("foo", new JSONArray(), new MyCallbackContext() {
    @override
    public void handlePluginResult(PluginResult pluginResult) {
        //your code for handling plugin result for Android UI
    }
}

実装MyCallbackContextは次のとおりです。

public abstract class MyCallbackContext extends CallbackContext {

    public MyCallbackContext() {
        super(null, null);
    }

    public void sendPluginResult(PluginResult pluginResult) {
        synchronized (this) {
            if (finished) {
                Log.w(LOG_TAG, "Attempted to send a second callback for ID: " + callbackId + "\nResult was: " + pluginResult.getMessage());
                return;
            } else {
                finished = !pluginResult.getKeepCallback();
            }
        }

        handlePluginResult(pluginResult);
    }

    public abstract void handlePluginResult(PluginResult pluginResult);

}

この 2 番目の方法は、現在のバージョンの Cordova でのみ機能し、次のソース コードに基づいています。

https://github.com/apache/cordova-android/blob/master/framework/src/org/apache/cordova/api/CordovaPlugin.java

https://github.com/apache/cordova-android/blob/master/framework/src/org/apache/cordova/api/CallbackContext.java

于 2013-03-08T13:30:39.623 に答える