스프링과 안드로이드 연동5 : (Javascript에서 Android 함수 호출하기)
[ 스프링과 안드로이드 연동5 : Javascript에서 Android 함수를 호출하기 ]
요즘은 웹을 개발하고 웹뷰를 이용해서 안드로이드에 붙이는 식으로 해서 반응형으로 하이브리드 앱을 만드는 경우가 많은데,
이러한 경우 웹뷰에서 버튼을 클릭한다거나 했을 때 자바스크립트에서 안드로이드에 있는 함수를 호출해서
안드로이드를 제어하고 싶은 경우가 있다.
----------------------------------------------------------------------------------------------------------------------------------
먼저, 웹뷰를 연결해 세팅부터 하자.
1. [ WebView(웹뷰) 세팅 ]
<!-- 인터넷 접속 권한 추가 -->
<uses-permission android:name="android.permission.INTERNET" />
를 manifest에 추가해주어야 하고
네트워크 작업은 백그라운드 쓰레드로 해야하며
백그라운드 쓰레드에서는 메인 뷰의 화면 제어를 할 수 없음으로
handler에게 대신해달라고 요청을 해야한다.
앞에선 계속 그렇게 해왔는데 이 2가지를 한번에 하는 것이
handler.post(new Runnable(){ run() }) 을 이용한 방식이다.
이런식으로해서 JavascriptInterface 클래스를 만들도록 한다.
function
callAndroid(){
var
str = document.getElementById("txtName").value;
window.myJSInterfaceName.callMethodName(str);
}
<
form
id
=
"formName"
action
=
""
>
<
input
id
=
"txtName"
type
=
"text" /
>
<
button
onclick
=
"javascript:callAndroid()"
>호출하기</
button
>
</
form
>
여기까지 했다면,
웹뷰 상에서 안드로이드 사용자가 "호출하기" 버튼을 클릭시에 callAndroid() 자바스크립트 메서드가 수행되고
해당 자바스크립트 메서드에서 window.myJSInterfaceName.callMethodName(str); 을 통해 안드로이드 메서드를
호출하여, TextView에 있는 메시지를 웹뷰를 통해 입력한 값으로 세팅하게 된다.
안드로이드 쪽 전체 코드는 다음과 같다.