모바일웹과 어플리케이션을 연결시키는 하이브리드 어플리케이션을 만들려면 필요하다.
지금까지 내가 이해한 바로는
html에서 적정한 신호(혹은 문자)를 어플리케이션에 보내서
그 신호를 읽은 어플리케이션에서 구현해놓은것들을 실행하는 수준으로 생각하고 있다.(혹은 반대)
--------------------------------------------------------------------------------------------- Web에서 APP로
-어플리케이션-
private final Handler handler = new Handler();
WebView web;
web.getSettings().setJavaScriptEnabled(true); // 웹뷰에서 자바스크립트 실행가능 하기
web.addJavascriptInterface(new AndroidBridge(), "HybridApp");
//웹뷰에서 해당 브릿지 연결하기 AndroidBridge는 클래스 이름 "HybridApp"는 html의 function이름.
//웹뷰에서 해당 브릿지 연결하기 AndroidBridge는 클래스 이름 "HybridApp"는 html의 function이름.
web.loadUrl(url); // 웹뷰에서 url 불러오기
web.setWebViewClient(new CustomWebViewClient()); // 각종 알림 및 요청을 받는 웹뷰
web.setWebChromeClient(new MyWebChromeClient());
private class AndroidBridge {
public void sendMessage() { //sendMessage() -> sendMessage(final String arg)
handler.post(new Runnable() {
public void run() {
//실행할 코딩
}
});
}
} -HTML-
<head>
<script language="JavaScript">
function sendMessage(){ //
sendMessage(arg)
window.HybridApp.sendMessage(); //
window.HybridApp.sendMessage(msg);
}
</script>
</head>
<a href="#" onclick="sendMessage()">클릭할 객체</a>
// onclick="sendMessage(document.getElementById('textMessageFromWeb').value)" value="hi"
// id="textMessageFromWeb" 으로 넣으면 value값이 넘어가서 어플리케이션에서 String값으로 전달 받을 수 있다. id와 value값이 한세트.
--------------------------------------------------------------------------------------------- APP에서 WEB으로
-어플리케이션-
web.setWebViewClient(new CustomWebViewClient());
private class CustomWebViewClient extends WebViewClient {
</head>
<a href="#" onclick="sendMessage()">클릭할 객체</a>
// onclick="sendMessage(document.getElementById('textMessageFromWeb').value)" value="hi"
// id="textMessageFromWeb" 으로 넣으면 value값이 넘어가서 어플리케이션에서 String값으로 전달 받을 수 있다. id와 value값이 한세트.
--------------------------------------------------------------------------------------------- APP에서 WEB으로
-어플리케이션-
web.setWebViewClient(new CustomWebViewClient());
private class CustomWebViewClient extends WebViewClient {
@Override
public void onLoadResource(WebView view, String url) {
//이곳에 코딩해야 웹뷰 실행시에 작동함.(혹은 버튼)
web.loadUrl("javascript:androidCall()");
//웹에있는 androidCall()이라는 함수를 호출함.
super.onLoadResource(view, url);
}
}
}
-HTML-
<head>
<script language="JavaScript">
function androidCall() {
//실행할 자바스크립트
}
</script>
</head>