dev_eun
[Android & React] 웹뷰(react)에서 안드로이드 함수 사용하기, 안드로이드에서 웹뷰(react) 함수 사용하기 본문
기타/안드로이드
[Android & React] 웹뷰(react)에서 안드로이드 함수 사용하기, 안드로이드에서 웹뷰(react) 함수 사용하기
_eun 2020. 10. 15. 17:161. 웹뷰(WebView)에서 안드로이드 함수 사용하기
onCreate()
함수에 JavascriptInterface
추가하기
mWebView.addJavascriptInterface(new WebBridge(), "BRIDGE");
WebBridge
는 웹뷰와 통신할 직접 만든 클래스입니다.
"BRIDGE"는 웹뷰와 안드로이드를 이어주는 string
입니다. 자신이 설정해서 사용하시면 됩니다.
Bridge Class 만들기
webView에서 사용할 함수를 모두 생성합니다.
class WebBridge {
@JavascriptInterface
public void testAndroid() {
// 실행할 내용
}
}
react에서 실행하기
react에서 WebBridge에서 생성했던 함수를 호출합니다. 리턴값도 받을 수 있습니다.
window.BRIDGE.testAndroid();
BRIDGE : 안드로이드에서 설정한 string
testAndroid()
: 안드로이드 함수
2. 안드로이드에서 웹뷰(WebView) 함수 사용하기
react에서 이벤트 생성
저는 componentDidMount에서 리스너를 등록하였습니다. "android"란 이벤트는 안드로이드에서 생성할 것입니다.
componentDidMount() {
window.addEventListener("android", async (e) => {
console.log(e.detail);
});
}
안드로이드에서 호출
안드로이드에서 evaluateJavascript
라는 함수를 통해 이벤트를 생성할 것입니다. 그냥 이벤트만 생성했을 때 되지 않아서 CustomEvent
를 통해 이벤트를 생성하였습니다. 그리고 저는 데이터도 함께 전송해야 했기 때문에 detail를 이용해서 전송하였습니다.
이벤트를 생성했으면 dispatchEvent
함수를 실행해줍니다.
디스패치를 하게 되면 위에서 등록했던 리스너가 동작할 것입니다.
webView.evaluateJavascript(
"var event = new CustomEvent(\"android\", {\n" +
" detail: \n" +
" " + result + "\n" +
" \n" +
"});\n" +
"window.dispatchEvent(event);\n"
, new ValueCallback<String>() {
@Override
public void onReceiveValue(String value) {
Log.d(TAG, "onReceiveValue: " + value);
}
});
CustomEvent에 대한 내용은 아래 내용을 참고하시면 됩니다.
https://developer.mozilla.org/ko/docs/Web/API/CustomEvent/CustomEvent
var event = new CustomEvent("cat", {
detail: {
hazcheeseburger: true
}
});
obj.dispatchEvent(event);
728x90
'기타 > 안드로이드' 카테고리의 다른 글
[Android] HttpURLConnection으로 POST 요청하기 (0) | 2020.10.19 |
---|---|
[Android] 안드로이드 Vibrator 사용법 (0) | 2020.02.23 |
[Android] 무음/진동 모드에서 벨,알람 울리기 (0) | 2020.02.17 |
[Android Studio] MacOS 단축키 (0) | 2020.02.16 |