Android Native与Html互相调用
JS调用Android原生
Js调用原生的有很多种,有使用通过在js中打开一个url,android采用拦截Url的形式获取参数,执行android 原生的代码逻辑,比如跳转或者弹出键盘。 也有使用prompt 实现,通过调用html的prompt方法,android这边通过WebChromeClient方法的boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result)
回调。同样通过与前端沟通好的协议,完成自己的Native代码逻辑。而本文采用WebView.addJavascriptInterface实现H5与Native通信。
public class JavaScriptUtil { private TextView mTextView; public JavaScriptUtil(TextView textView) { mTextView = textView; } @JavascriptInterface public void receiveByJs(String content) { mTextView.setText(content); }}//Activity中写入这样的代码mWebView = findViewById(R.id.web_view);mWebView.getSettings().setJavaScriptEnabled(true);//支持JsJavaScriptUtil mJavaScriptUtil = new JavaScriptUtil(tv_content);mWebView.addJavascriptInterface(mJavaScriptUtil, "jsCallNative");mWebView.loadUrl("file:///android_asset/index.html"
对应的html页面只需要调用即可。
<html><head> <meta charset="utf-8"> <title>JsBridgetitle> <script type="text/javascript"> function h5CallNative(){ var content = "我是来自Html的消息"; //jsCallNative 可以理解成我们传入的JavaScriptUtil 对象 jsCallNative.receiveByJs(content); }//暂时不能管这个方法 function nativeCallH5(message){ document.getElementById("demo").innerHTML=message; } script>head><body><button onclick="h5CallNative()">H5调用原生button><p id="demo">p>body>html>
Android原生调用JS
同样是调用上面的html文件,有一点不同的是android端的调用只需要调用loadUrl 或者 evaluateJavascript api 就可以调用到js的方法。其中
mWebView.loadUrl("javascript:nativeCallH5('"+nativeMessage+"')")
方式是android 4.4以前的方法。 android 4.4以后使用方式二 mWebView.evaluateJavascript("javascript:nativeCallH5('"+nativeMessage+"')",new ValueCallback
调用js的方法。ValueCallback是js的返回值。
private void nativeCallH5(final String nativeMessage) { mWebView.post(new Runnable() { @Override public void run() { //方式一 // mWebView.loadUrl("javascript:nativeCallH5('"+nativeMessage+"')"); //方式二 mWebView.evaluateJavascript("javascript:nativeCallH5('"+nativeMessage+"')", new ValueCallback<String>() { @Override public void onReceiveValue(String value) { Log.d(TAG, "onReceiveValue: " + value); } }); } }); }
注意:javascript:nativeCallH5('"+nativeMessage+"')"
里面有个单引号,如果传递的参数是字符串就要加单引号,数字可以不加。
更多相关文章
- Android 中三种使用线程的方法
- android常用颜色代码定义
- android 设置全屏的三种方式
- Android实现推送方式解决方案
- Android Activity onConfigurationChanged()方法 监听状态改变
- Android Market新增运营商结算方式
- Android高手进阶教程(二十)之---Android与JavaScript方法相互调
- android升级adt和sdk之后无法识别SDK Location的一个解决方式