안드로이드

[cordova] Toast plugin 만들기

IT꿈나무 2021. 9. 15. 16:42
반응형

1. 배경:
 안드로이드 하이브리드 앱을 구현하게 될때, 코도바를 이용하여 웹코드(html,javaScript)언어를 통해서 앱을 구현하게 해줌과 동시에 네이티브와 웹간의 데이터 통신을 할 수 있게 해주는 기능을 한다. (@JavascriptInterface를 통해서도 통신이 가능한데...)

 

2. 구현

- Echo.java

package com.android.test.plugins;

import android.util.Log;
import android.widget.Toast;

import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaPlugin;
import org.json.JSONArray;
import org.json.JSONException;

public class Echo extends CordovaPlugin {

    @Override
    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
        //action  액션명 , args 아규먼트 벨류 값들, callbackContext 성공 실패 아규먼트 전달 콜백
        Log.i("Echo", "execute( action.toString(): " + action.toString());
        Toast.makeText(cordova.getContext(), action.toString(), Toast.LENGTH_LONG).show();
        Log.i("Echo", "execute( args.getString(0: ");
//        if (action.equals("echo")) {

        //Log.i("Echo", "execute( args.toString(0: " + args.toString());    //["arg1","arg2"]
        //Log.i("Echo", "execute( args.getString(0: " + args.getString(0)); //arg1
        String message = args.getString(0); //arg1
        Log.i("Echo", "execute( message: " + message);
        //this.echo(null, callbackContext);
        this.echo(message, callbackContext);
        return true;
    }


    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.");   // 실패 콜백에 인자값 전달. ""Nothing to echo. err:Expected one non-empty string argument."11"

        }
    }

}

 

- 플러그인 등록

res/xml/config/config.xml

    <feature name="EchoPlugin">
        <param
            name="android-package"
            value="com.android.test.plugins.Echo" />
    </feature>

 

- Html 및 javascript

	<script>
window.echo = function(str, callback) {
	cordova.exec(callback, function(err) {
    		callback('Nothing to echo. err:' + err); //에러 메세지 출력
    }, "EchoPlugin", str, ["arg1","arg2"]);
    //플러그인 이름 / action 명 / 전달할 인자값.
};



$("#toast_btn").unbind("click").click(function(){
	console.log($("#toast_txt").val());
	alert($("#toast_txt").val());

	window.echo($("#toast_txt").val(), function(echoValue) {
		console.log(JSON.stringify(echoValue)+"11"); //"arg1"11
		console.log(echoValue+"22");		//arg122
		//alert(JSON.stringify(echoValue));
	});
});
  </script>
  
  
  	<dt>Toast</dt>
		<dd>
			<input type="text" class="winputFild" id="toast_txt" style="Width:80%; text-overflow: ellipsis; white-space: nowrap; overflow: hidden;" />
			<input type="button" id="toast_btn" value="Toast" />
		</dd>

 

 

*참고자료:

[1] https://cordova.apache.org/docs/ko/5.4.0/guide/hybrid/plugins/index.html

[2] https://ememomo.tistory.com/157?category=606397 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형