WebView가 기본적으로 내장 브라우저 기능을 하지만,
자바스크립트를 이용해 데이터를 주고받음으로써 한몸처럼 행동할수가 있다.
WebView에 넣을 html을 이용한 버튼
<input type="button" value="test" onclick="showAndroid('Hello')" />
그리고 WebView에 넣을 자바스크립트
<!--Data from Javscript-->
<script type="text/javascript">
function showAndroid(toast) {
Android.showToast(toast);
}
</script>
안드로이드에서도 클래스를 하나 만들어준다.
import android.content.Context; |
어노테이션이 빠지면 동작이 안되는경우가 많다고 하니 조심 (sdk 17이상)
그리고 안드로이드에서 데이터를 넘겨주게끔 통신을 다음과 같이 설정한다.
WebView webview = (WebView)findViewById(R.id.webview); |
이렇게 되면 웹뷰에서도 버튼을 눌렀을때, showToast라는 메서드가 작동하게 된다.
다만 클릭을 하지말고 처음에 스크립트가 실행되었을때 객체를 넘기고 싶다면 다음과 같은 메서드를 쓸수있다.
public void passData(final WebView webView, final Data data) {
webView.setWebViewClient(new WebViewClient() {
public void onPageFinished(WebView view, String url) {
Gson gson = new Gson();
String dataString = gson.toJson(data);
view.loadUrl("javascript:initData('" + dataString +"')");
}
});
}
GSON은 JSON을 쉽게 해주는 라이브러리인데 굳이 현재 최신버전은 2.6이며 , 신기하게도 기본적으로 라이브러리가 안에 (2.3버전) 내장되어있기 때문에 그냥 냅다 쓰면 객체를 JSON객체로 변환해준다.
저렇게 웹뷰로 데이터를 넘길때 객체로는 넘겨지지 않으므로, .string으로 변하게 해서 해야한다.
'모바일 > Android' 카테고리의 다른 글
Mysql -> PHP -> JSON select시 코드 (0) | 2016.05.10 |
---|---|
mysql timestamp (0) | 2016.05.10 |
[CSS] justify-content (0) | 2016.04.30 |
opera 개발자 / microsoft code 정렬 단축키 (0) | 2016.04.30 |
NVD3, 버그(?) 피해가기 (Uncaught TypeError) (2) | 2016.04.30 |