Android 开发进程 0.36 原生与H5交互
2021/10/20 7:09:32
本文主要是介绍Android 开发进程 0.36 原生与H5交互,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
JS调用原生方法
H5调用Android方法基本有两种,第一步通用的初始化webview
WebSettings settings = webview.getSettings(); settings.setJavaScriptEnabled(true); //允许在WebView中使用js
2 创建桥接类,这是第一种方法
private Context mContext; private WebView mWebView; public static final String javaInterface= "javaInterface"; public JavaScriptMethod(Context context, WebView webView) { mContext = context; mWebView = webView; } @JavascriptInterface public void showToast(String json){ Toast.makeText(context, json, Toast.LENGTH_SHORT).show(); }
这种方法就是在JavaScript中直接调用桥接类定义的方法,在初始化webview的同时执行
JavaScriptMetod m = new JavaScriptMetod(this, webview); webview.addJavascriptInterface(m, JavaScriptMetod.javaInterface);
如果现在在 tomcat的webapp下文件夹简单填写一个HTML文件,添加一个按钮并在script标签中添加以下JavaScript方法
function jscallandroid(){ var jsondata={"toast":"js调用了Android方法"}; window.jsInterface.showToast(JSON.stringify(jsondata)); }
运行tomcat服务,在webview中点击按钮即可执行原生方法。
第二种方法使用范围更加普遍,如果在javascript的方法中使用以下方式:
var json = {"data": "I am a toast"}; window.location.href="protocol://android?code=toast&data="+JSON.stringify(json);
webview会重加载给到的链接,再重写webview类的 shouldOverrideUrlLoading方法可以拦截返回的url,从而做出相应。url应提前规定,如开头写作上文的“protocol://android?”,后面的code和data可以区分请求的方法和传输的数据。如以下实例:
webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { String pre = "protocol://android"; if (!url.contains(pre)) { return false; } //执行过滤 return true; } });
setWebViewClient方法返回false是默认不执行过滤,继续加载。返回true则会拦截uri不直接加载。可以使用uri字符串匹配的方法过滤提取code和data
需注意的是shouldOverrideUrlLoading方法参数为view和url的方法已经弃用,在Lollipop及以上版本不会默认执行,所以需要重写同名的另一个参数为view和request的方法,在重写的方法中调用上述方法。
Android调用JS方法
这个使用较少,可以直接使用webview的loadurl方法。如Javascript中已经有以下代码:
var showMessage=function (json) { alert(JSON.stringify(json)) }
android中(如在点击事件方法中)可以使用:调用js方法需要在主线程中。
JSONObject json=new JSONObject(); json.put("alert","loading"); webView.loadUrl("javascript:showMessage("+json.toString()+")");
这篇关于Android 开发进程 0.36 原生与H5交互的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-01-18android.permission.read_media_video
- 2024-01-18android_getaddrinfo failed eai_nodata
- 2024-01-18androidmo
- 2024-01-15Android下三种离屏渲染技术
- 2024-01-09Android 蓝牙使用
- 2024-01-06Android对接华为AI - 文本识别
- 2023-11-15代码安全之代码混淆及加固(Android)
- 2023-11-10简述Android语音播报TTS
- 2023-11-06Android WiFi工具类
- 2023-07-22Android开发未来的出路