[Android] Android local html 불러오기 (web으로 callback) (4/4)

[Android] Android local html 불러오기 (web으로 callback) (4/4)

728x90

목적:

안드로이드 웹뷰에서 안드로이드 브릿지를 이용해서 @JavascriptInterface의 메서드를 웹에서 호출할 수 있다.

호출에서 그치지 않고, 다시 웹으로 콜백(callback) 받는 방법을 구현해 본다.

방법:

MyHome.html

web_callback = function(str){ console.log("web_callback "+ str); alert("web_callback "+ str); } Android(aos) 호출 관련 (bridge는 aos)

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); }

프로젝트코드:

MyWebView (3).zip 0.36MB

참고자료:

[1] https://royzero.tistory.com/25

from http://helloit.tistory.com/324 by ccl(A) rewrite - 2021-09-30 11:01:22