2013-03-07 4 views
0

Android 용 Cordova 플러그인을 작성하여 HTML5 GUI로 phonegap 앱을 작성했습니다.기본 Android 인터페이스와 함께 cordova 플러그인 사용

이제 네이티브 인터페이스도 갖고 싶습니다. 네이티브 UI에 내 플러그인을 재사용하는 데 가장 깨끗한 옵션이 무엇인지 궁금합니다. 기본적으로 나는 phonegap (HTML5) 인터페이스를 가진 앱과 Codyova 플러그인을 사용하는 기본 Android 인터페이스가있는 앱 두 가지를 갖고 싶습니다. 이런 이유로 나는 WebView에서 자바 스크립트에서 다음 메소드를 호출하지 않고 그것을 사용하는 방법을 모르는, 그래서 여기 난 그냥 원하는 http://docs.phonegap.com/en/2.3.0/guide_plugin-development_android_index.md.html

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

설명

이 플러그인은,는 CordovaPlugin 클래스를 확장 WebView 거치지 않고 플러그인의 기본 측면 전화 :

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

난 그냥 비교적 쉽게 플러그인의 코드를 적용 할 수 있음을 제공, 내가 찾을 싶습니다 플러그인을 프론트 엔드/백엔드의 더 나은 디커플링을 위해 정확히 동일하게 유지하는 방법 (다른 앱에서 코드를 복제 할 필요없이 하나의 앱에서 코드를 변경할 수 있음).

전혀 가능합니까? 나는 이것이 코르도바 플러그인을 가지고 있지 않다는 것을 이해하지만, 나는 그 주위에 길을 찾고 싶다.

감사합니다. 제 생각에는

+0

더 자세히 문제를 설명해 주시겠습니까? "기본 UI를 위해 내 플러그인을 재사용하는"것은 무엇을 의미합니까? 네이티브 및 HTML5 앱에서 비즈니스 로직을 호출 하시겠습니까? – gingo

+0

나는이 질문을 편집하여 조금 더 명확하게 만들었을 것이다. – gozzilli

답변

1

당신은 Facade pattern을 적용해야합니다

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

단순히 MyFacade라는 전용 클래스 코르도바 플러그인에서 비즈니스 로직을 추출하고 뒤에 모든 비즈니스 로직을 숨 깁니다.

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); 

} 

이 두 번째 방법은 코르도바의 현재 버전에서만 작동이 소스 코드를 기반으로

다른 방법은 같은 것을 할 것입니다 :

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

+0

'MyCallbackContext' 클래스를'CallbackContext'로 변경하셨습니까? 또는 이것을 명시 적으로 '자체'로 확장 했습니까? –

+0

맞습니다. MyCallbackContext가 CallbackContext를 확장해야합니다! – gingo

+0

그건 그렇고, 비슷한 질문에 답이 없다. 그들에게 친절을 베풀어주십시오. [질문 1,이 코멘트를 보시려면 plz을 만드십시오] (http://stackoverflow.com/questions/19177991/asynchronous-communication-between-javascript-and-phonegap-plugin#comment28451880_19198844), [질문 2] (http : //stackoverflow.com/questions/19558535/). –

관련 문제