안드로이드

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

IT꿈나무 2021. 9. 30. 10:02
반응형

목적:

안드로이드 웹뷰에서 안드로이드 브릿지를 이용해서 @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);
        }

 

프로젝트코드:

MyWebView (3).zip
0.36MB

 

참고자료:

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

 

반응형