반응형
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
반응형
'안드로이드' 카테고리의 다른 글
[Android] 터미널 빌드 명령어 (0) | 2021.09.23 |
---|---|
[Android] SharedPreferences- 공유 환경설정- 데이터 저장 1편 (0) | 2021.09.16 |
[Android] 액티비티를 다이얼로그 효과 주기 (0) | 2021.08.30 |
[Android] 애니메이션 효과?(회전) 주기 (0) | 2021.07.20 |
[Android] 탭 메뉴의 구현 2편 (TabLayout과 ViewPager2)-dot Indicator의 구현 (0) | 2021.07.15 |