반응형
목적:
안드로이드 웹뷰에서 안드로이드 브릿지를 이용해서 @JavascriptInterface의 메서드를 웹에서 호출할 수 있다.
호출에서 그치지 않고, 다시 웹으로 콜백(callback) 받는 방법을 구현해 본다.
방법:
MyHome.html
<html>
<head>
<meta charset="utf8">
<script type="text/javascript">
web_callback = function(str){ <!--안드로이드에서 호출 -->
console.log("web_callback "+ str);
alert("web_callback "+ str);
}
</script>
</head>
<body>
Android(aos) 호출 관련 (bridge는 aos)
<br>
<input type="button" value="aos.call_log('로그가 전달 되나?') 함수호출" onclick="window.aos.call_log('로그가 전달 되나?')"/> <br>
<input type="button" value="aos.callMessage() 함수호출" onclick="window.aos.callMessage()"/><br>
</body>
</html>
MyAndroidBridge.java
package com.example.mywebview;
import android.os.Handler;
import android.util.Log;
import android.webkit.JavascriptInterface;
import android.webkit.WebView;
public class MyAndroidBridge {
private Handler mHandler = null;
private WebView mWebView = null;
public MyAndroidBridge(WebView _mWebView){
mWebView = _mWebView;
mHandler = new Handler();
}
@JavascriptInterface
public void call_log(String msg){
Log.i(getClass().getName(),"call_log() msg:"+ msg);
}
@JavascriptInterface
public void callMessage(){
//Toast.makeText(mContext, "Web에서 호출된 메시지입니다.", Toast.LENGTH_SHORT).show(); // Web으로 호출을 반환시, 동일 Activity로는 수행이 불가능하기때문에 스레드를 하나 생성해 호출해주어야합니다.
Log.i(getClass().getName(),"callMessage()을 호출");
mHandler.post(new Runnable() {
@Override
public void run() {
try{
mWebView.loadUrl("javascript:web_callback('콜백메시지입니다. test');");
}catch (Exception e){
e.printStackTrace();
}
}
});
}
}
MainActivity.java
this.mWebView = findViewById(R.id.webView);
MyAndroidBridge myAndroidBridge = new MyAndroidBridge(mWebView); //자바스크립트인터페이스의 모음
this.mWebView.addJavascriptInterface(myAndroidBridge,"aos"); //window.aos.call_log("log test")
mWebView.getSettings().setJavaScriptEnabled(true); // 자바스크립트 사용 허용!!
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
WebView.setWebContentsDebuggingEnabled(true);
}
프로젝트코드:
참고자료:
[1] https://royzero.tistory.com/25
반응형
'안드로이드' 카테고리의 다른 글
[Android] DPI 별 기준 해상도. (0) | 2021.10.18 |
---|---|
[Android] 리싸이클러 뷰 구현하기. (0) | 2021.10.04 |
[Android] Anroid local html 불러오기 (android bridge 구현) (3/4) (0) | 2021.09.29 |
[Android] Anroid local html 불러오기 (assets/www/MyHome.html 호출) (2/3) (0) | 2021.09.29 |
[Android] Anroid local html 불러오기 (javaScript onclick 구현) (1/3) (0) | 2021.09.29 |