
AndoidBridge)를 연결한다.webView.addJavascriptInterface(new AndroidBridge(), "TestApi");
TestApi는 웹에서 호출할 이름으로 쓰일 것 (window.TestApi.postMessage("data"))
브릿지 클래스에 @JavascriptInterface 로 사용할 메소드를 정의해준다.
private class AndroidBridge {
public AndroidBridge() {
// TODO Auto-generated constructor stub
}
@JavascriptInterface
public void postMessage(String id) {
// 웹으로부터 전달받은 String 값 id
}
}
onCreate() 설정override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
val webview = binding.webview
webview.settings.javaScriptEnabled = true
webview.loadUrl("file:///android_asset/sample.html")
webview.addJavascriptInterface(WebInterface(this), "TestApi")
}
class WebInterface(private val mContext: Context) {
// 웹뷰 -> 앱으로 데이터 전달
@JavascriptInterface
fun showToast(toast: String){
Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show()
}
// 앱 -> 웹뷰로 데이터 전달
@JavascriptInterface
fun getJsonData(): String {
// JSON 데이터를 문자열로 반환
return createJsonData().toString()
}
private fun createJsonData(): Any {
val jsonObject = JSONObject()
jsonObject.put("종목코드", "종목명")
jsonObject.put("종목코드", "현재가")
jsonObject.put("종목코드", "등락율")
return jsonObject
}
}
"file:///android_asset/~ 의 경로로 바로 이용할 수 있다. <input type="button" value="웹뷰->앱" onClick="showAndroidToast('html에서 설정한 String이오.')"/>
<input type="button" value="앱->웹뷰" onClick="showJson()"/>
<div id="jsonDisplay">
<h2>Received JSON Data:</h2>
<pre id="jsonData"></pre>
</div>
<script type="text/javascript">
function showAndroidToast(toast) {
TestApi.showToast(toast);
}
</script>
<script type="text/javascript">
// 안드로이드에서 받은 JSON 데이터 표시
function displayJsonData(jsonData) {
var jsonDisplayDiv = document.getElementById('jsonData');
jsonDisplayDiv.innerText = JSON.stringify(jsonData, null, 2);
}
</script>
<script>
function showJson(){
// 안드로이드로부터 JSON 데이터 받기
var receivedJsonData = JSON.parse(TestApi.getJsonData());
displayJsonData(receivedJsonData);
}
</script>
허접한 결과물~

회사에서는 좀 다른 형태로 주고 받을테지만 일단 원리는 알았따.. 월요일에 해보자 ^_^