안 드 로이드 플러그인

이 섹션에서는 안 드 로이드 플랫폼에서 네이티브 플러그인 코드를 구현 하는 방법에 대 한 세부 정보를 제공 합니다. 이것을 읽기 전에 응용 프로그램 플러그인 플러그인의 구조와 그것의 일반 자바 스크립트 인터페이스의 개요 참조 하십시오. 이 섹션 코르도바 webview에서 네이티브 플랫폼 및 뒤 통신 샘플 에코 플러그인을 설명 하 고 있습니다. 다른 샘플도 CordovaPlugin.java 에서 주석 참조.

안 드 로이드 플러그인 코르도바-안 드 로이드, 안 드 로이드 WebView 그것에 붙어 있던 걸이로 구성 된 기반으로 합니다. 플러그인에서 클래스 매핑으로 표시 됩니다는 config.xml 파일. 플러그인을 확장 하는 하나 이상의 Java 클래스의 구성는 CordovaPlugin 중 하나를 재정의 하는 클래스는 execute 방법. 최고의 연습, 플러그인 또한 처리 하는 pauseresume 플러그인 사이 전달 하는 모든 메시지와 함께 이벤트. 장기 실행 요청, 미디어 재생, 청취자, 또는 내부 상태와 같은 백그라운드 작업 플러그인을 구현 하는 onReset() 메서드 뿐만. 때 실행은 WebView 이동 새 페이지 또는 새로 고침, 자바 스크립트가 다시 로드 되는.

플러그인 클래스 매핑

플러그인의 자바 인터페이스를 사용 하는 cordova.exec 메서드가 다음과 같이:

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

이 효과적으로 전화 안 드 로이드 네이티브 쪽을 WebView에서 요청 마샬링하는 action 메서드는 service 추가 인수에 전달 된 클래스는 args 배열.

코르 도우 바 안 드 로이드 응용 프로그램의 플러그인을 지정 해야 합니다 자바 파일 또는 jar 파일 자체의 플러그인 배포 여부를 res/xml/config.xml 파일. 사용 하는 방법에 대 한 자세한 내용은 응용 프로그램 플러그인을 참조는 plugin.xml 파일이 주입을 feature 요소:

    <feature name="<service_name>">
        <param name="android-package" value="<full_name_including_namespace>" />
    </feature>

서비스 이름이 일치 자바 스크립트에 사용 된 exec 를 호출 합니다. 자바 클래스의 정규화 된 네임 스페이스 식별자입니다. 그렇지 않으면, 플러그인 컴파일 수 있지만 여전히 코르도바를 사용할 수 없습니다.

플러그인 초기화 및 수명

각각의 인생에 대 한 플러그인 개체의 인스턴스 생성 WebView . 플러그인은 인스턴스화되지 않습니다 JavaScript에서 호출 하 여 처음 참조 될 때까지 않는 한 <param>onload name 특성 설정 "true"config.xml . 예를 들면:

<feature name="Echo">
    <param name="android-package" value="<full_name_including_namespace>" />
    <param name="onload" value="true" />
</feature>

플러그인 사용 해야 있는 initialize 그들의 시작 논리에 대 한 방법.

@Override
public void initialize(CordovaInterface cordova, CordovaWebView webView) {
    super.initialize(cordova, webView);
    // your init code here
}

안 드 로이드 자바 플러그인을 작성

플러그인 요청을 네이티브 쪽에서 자바 호출 발생 및 correspoinding 자바 플러그인에 제대로 매핑되지는 config.xml 파일, 하지만 무엇 처럼 최종 안 드 로이드 자바 플러그인 클래스 보여? 어떤 자바 스크립트의 플러그인 디스패치 됩니다 exec 함수 플러그인 클래스에 전달 execute 방법. 대부분 execute 구현을 다음과 같이:

    @Override 공공 부울 실행 (문자열 작업, JSONArray args, CallbackContext callbackContext) JSONException을 throw {경우 ("beep".equals(action)) {this.beep(args.getLong(0));
            callbackContext.success();
            반환 진정한;
        } 반환 허위;  / / "MethodNotFound" 오류가 잘못 된 결과 반환 합니다.
    }

자바 스크립트 exec 함수의 action 매개 변수가 선택적 매개 변수와 함께 파견 전용 클래스 메서드에 해당 합니다.

예외를 catch 하 고 오류를 반환 하면 오류 반환 자바 검색 자바 예외 이름을 가능 한 한 명확 하도록 중요 하다.

스레딩

플러그인의 자바 스크립트는 하지 실행의 주 스레드에 WebView 인터페이스; 대신에, 그것에서 실행 되는 WebCore 스레드, 마찬가지로 execute 메서드. 사용자 인터페이스와 상호 작용 해야 하는 경우 다음 변형을 사용 해야 합니다.

    @Override
    public boolean execute(String action, JSONArray args, final CallbackContext callbackContext) throws JSONException {
        if ("beep".equals(action)) {
            final long duration = args.getLong(0);
            cordova.getActivity().runOnUiThread(new Runnable() {
                public void run() {
                    ...
                    callbackContext.success(); // Thread-safe.
                }
            });
            return true;
        }
        return false;
    }

사용 다음 주 인터페이스에서 실행할 필요가 없는 경우의 스레드, 하지만 차단 하지 않으려면는 WebCore 스레드 중 하나:

    @Override
    public boolean execute(String action, JSONArray args, final CallbackContext callbackContext) throws JSONException {
        if ("beep".equals(action)) {
            final long duration = args.getLong(0);
            cordova.getThreadPool().execute(new Runnable() {
                public void run() {
                    ...
                    callbackContext.success(); // Thread-safe.
                }
            });
            return true;
        }
        return false;
    }

에코 안 드 로이드 플러그인 예제

응용 프로그램 플러그인에서 설명 하는 자바 인터페이스 에코 기능은 사용는 plugin.xml 를 삽입 하는 feature 로컬 플랫폼 사양 config.xml 파일:

    <platform name="android">
        <config-file target="config.xml" parent="/*">
            <feature name="Echo">
                <param name="android-package" value="org.apache.cordova.plugin.Echo"/>
            </feature>
        </config-file>
    </platform>

다음에 다음 추가 src/org/apache/cordova/plugin/Echo.java 파일:

    package org.apache.cordova.plugin;

    import org.apache.cordova.CordovaPlugin;
    import org.apache.cordova.CallbackContext;

    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;

    /**
     * This class echoes a string called from JavaScript.
     */
    public class Echo extends CordovaPlugin {

        @Override
        public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
            if (action.equals("echo")) {
                String message = args.getString(0);
                this.echo(message, callbackContext);
                return true;
            }
            return false;
        }

        private void echo(String message, CallbackContext callbackContext) {
            if (message != null && message.length() > 0) {
                callbackContext.success(message);
            } else {
                callbackContext.error("Expected one non-empty string argument.");
            }
        }
    }

클래스를 확장 하는 파일의 상단에 필요한 수입 CordovaPlugin , 인 execute() 에서 메시지를 받도록 재정의 메서드 exec() . execute()처음의 값을 테스트 하는 방법 action ,이 경우에 단 하나 유효한 echo 값. 다른 작업 반환 false 에서 결과 INVALID_ACTION 자바 스크립트 측면에 호출 오류 콜백 변환 오류.

다음 메서드를 사용 하 여 에코 문자열 검색에서 args 개체의 getString 메서드를 첫 번째 매개 변수를 지정 하는 메서드에 전달 된. 값은 사설 전달 된 후 echo 방법, 그것은 그것은 확인 하기 위하여 매개 변수 검사 null 또는 어떤 경우에는 빈 문자열 callbackContext.error() 자바 스크립트의 오류 콜백을 호출 합니다. 다양 한 검사를 통과 하는 경우는 callbackContext.success() 원래 전달 message 자바 스크립트의 성공 콜백으로 매개 변수로 문자열.

안 드 로이드 통합

안 드 로이드 기능을 Intent 시스템 프로세스가 서로 통신할 수 있도록 합니다. 플러그인에 액세스할 수 있습니다 한 CordovaInterface 안 드 로이드를 액세스할 수 있는 개체 Activity 응용 프로그램을 실행 하는. 이 Context 새로운 안 드 로이드를 실행 하는 데 필요한 Intent . CordovaInterface시작 하는 플러그인을 수 있습니다는 Activity 결과, 한 때 콜백 플러그인을 설정 하는 Intent 응용 프로그램에 반환 합니다.

코르 도우 바 2.0 현재 플러그인 더 이상 직접 액세스할 수 있는 Context , 유산 ctx 멤버는 사용 되지 않습니다. 모든 ctx 에 존재 하는 메서드는 Context , 그래서 둘 다 getContext()getActivity() 필요한 개체를 반환할 수 있습니다.

디버깅 안 드 로이드 플러그인

이클립스 자바 소스는 프로젝트에 포함 된 플러그인을 디버깅할 수 있습니다. 만 최신 버전의 안 드 로이드 개발자 도구를 사용 하면이 기능은 아직 지원 되지 않습니다 완벽 하 게 그래서 소스 코드를 JAR 종속성을 연결할 수 있습니다.