AOS

안드로이드 웹뷰 통신

asu2880 2021. 6. 28. 15:33

@SuppressLint({"SetJavaScriptEnabled", "JavascriptInterface"})
public class MainActivity extends Activity {
WebView mWebView;
TextView mTextView;
EditText mEditText;
Button mButton;

private final Handler handler = new Handler();

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mWebView = (WebView) findViewById(R.id.webview);
mButton = (Button) findViewById(R.id.button);
mTextView = (TextView) findViewById(R.id.textView);
mEditText = (EditText) findViewById(R.id.edittext);

mWebView.getSettings().setJavaScriptEnabled(true); //웹뷰에서 자바스크립트 실행가능 하기
mWebView.addJavascriptInterface(new AndroidBridge(), "MyApp"); //웹뷰에서 해당 브릿지 연결하기. "AndroidBridge"는 클래스 이름, "MyApp" html func이름
mWebView.loadUrl("file:///android_asset/javapage.html"); //웹뷰에서 url 불러오기
mWebView.setWebViewClient(new CustomWebViewClient());

mButton.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
mWebView.loadUrl("javascript:setMessage('" + mEditText.getText() + "')");
}
});
}

//APP -> WEB
private class CustomWebViewClient extends WebViewClient {
@Override
public void onLoadResource(WebView view, String url) {
mWebView.loadUrl("javascript:setMessage('" + mEditText.getText() + "')");
super.onLoadResource(view, url);
}
}

//WEB -> APP
private class AndroidBridge {
@JavascriptInterface
public void sendMessage(final String arg) {
handler.post(new Runnable() {
public void run() {
//mEditText.setText("받은 메시지 : \n" + arg);
mTextView.setText(mTextView.getText() + "\n" + arg);
}
});
}
}
}

 

 

 

<html>
<head>
</head>
<body>
<h2>WebView 통신</h2>
<br/>
받은 메시지 :<p id="textMessageFromApp"></p>

<input type="text" id="textMessageToApp" value=""/>
<input type="button" value="App으로 전송" onclick="sendMessage(document.getElementById('textMessageToApp').value)" />

<script language="JavaScript">
function setMessage(arg) {
var mainFrame = document.getElementById('textMessageFromApp');
var createFrame = document.createElement("div");

createFrame.innerHTML = arg;
mainFrame.appendChild(createFrame);
}

function sendMessage(msg){
window.MyApp.sendMessage(msg);
}
</script>
</body>
</html>

 

728x90
반응형

'AOS' 카테고리의 다른 글

ConstraintLayout  (0) 2022.04.04
Android - Bottom Sheet Dialog  (0) 2021.08.23
meta-tag보안  (0) 2021.06.01
보안(서버도메인 등)  (0) 2021.06.01
보안(서버도메인 등)  (0) 2021.06.01