Android中Java与web通信
Android中Java与web通信不是新的技术了,在android公布之初就支持这样的方式,2011年開始流行,而这样的模式开发也称作Hybird模式。
这里对android中的Java与web通信方式做一下总结。Android中有3种方式能够实现Java与web通信。
1、重写WebViewClient
private class MyWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if (Uri.parse(url).getHost().equals("www.example.com")) { // This is my web site, so do not override; let my WebView load the page Toast.makeText(WebViewClientActivity.this, url, Toast.LENGTH_SHORT).show(); return false; } return true; } }
通过shouldOverrideUrlLoading(WebView view, String url)返回的url获取数据
比如:url=“www.example.com?body=loadurl” 能够截取后面的body数据。
在web中调用方式:
<button onclick="window.open('www.example.com?body=loadurl')">showAndroidToast</button>
2、重写WebChromeClient
final class MyWebChromeClient extends WebChromeClient { @Override public boolean onJsAlert(WebView view, String url, String message, JsResult result) { Log.d("MyWebChromeClient", message); Toast.makeText(OnJsPromptActivity.this, message, Toast.LENGTH_SHORT).show(); result.confirm(); return true; } @Override public boolean onJsConfirm(WebView view, String url, String message, JsResult result) { // TODO Auto-generated method stub return super.onJsConfirm(view, url, message, result); } @Override public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) { Toast.makeText(OnJsPromptActivity.this, message, Toast.LENGTH_SHORT).show(); // TODO Auto-generated method stub //return super.onJsPrompt(view, url, message, defaultValue, result); result.confirm(); return true; } }
使用onJsAlert或者onJsPrompt,onJsAlert。onJsPrompt分别相应JS中的alert和prompt。
在web中调用方式:
<button onclick="showAndroidToast('Hello Android!');">showAndroidToast</button> <script type="text/javascript"> function showAndroidToast(toast) { prompt('js prompt'); } </script>
3、addJavascriptInterface
mWebView.addJavascriptInterface(new WebAppInterface(this), "Android"); public class WebAppInterface { Context mContext; /** Instantiate the interface and set the context */ WebAppInterface(Context c) { mContext = c; } //在Android 4.2以上的,google作了修正。通过在Java的远程方法上面声明一个@JavascriptInterface, /** Show a toast from the web page */ @JavascriptInterface public void showToast(String toast) { Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show(); } }
addJavascriptInterface是Android提供的方法。包括两个參数。第一个是java中实现的类,类提供了javascript訪问方法。第二个參数是java类映射到javascript的对象名。
在web中调用方式:
<button onclick="showAndroidToast('addjavascriptinterface');">showAndroidToast</button> <script type="text/javascript"> function showAndroidToast(toast) {