안 드 로이드 플러그인

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

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

플러그인 클래스 매핑

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

    exec (< successFunction >, < failFunction >, < 서비스 >, < 작업 > [< 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
}

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

플러그인 요청을 네이티브 쪽에서 자바 호출 발생 및 해당 Java 플러그인에 제대로 매핑되지는 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 종속성을 연결할 수 있습니다.