• 安卓APP webview加载H5 之间通信


    这篇文章主要阐述3个知识点(安卓APP 怎么用webview加载H5,H5怎么调用安卓定义的方法,安卓怎么调用H5定义的方法)。

    1,安卓APP 怎么用webview加载H5

         安卓端定义个webview xml 页面,代码如下所示:

    1. "1.0" encoding="utf-8"?>
    2. <WebView xmlns:android="http://schemas.android.com/apk/res/android"
    3. android:id="@+id/web_view_id"
    4. android:layout_width="match_parent"
    5. android:layout_height="match_parent">
    6. WebView>

    之后再对webview 实例进行设置,用loadUrl 方法加载H5 路径即可。代码如下:

    1. webView = (WebView) view.findViewById(R.id.web_view_id);
    2. WebSettings settings = webView.getSettings();
    3. settings.setJavaScriptEnabled(true);
    4. WebChromeClient webChromeClient = new WebChromeClient();
    5. webView.setWebChromeClient(webChromeClient);
    6. settings.setUseWideViewPort(true);
    7. settings.setLoadWithOverviewMode(true);
    8. settings.setBuiltInZoomControls(true);
    9. settings.setSupportZoom(true);
    10. settings.setDefaultTextEncodingName("UTF-8");
    11. settings.setJavaScriptCanOpenWindowsAutomatically(true);
    12. //String _url = "http://xxx.xxx.xxx/link/index.html#/home/index"; //服务器地址
    13. String _url = "file:android_asset/dist/index.html#/home/index"; //本地地址
    14. webView.loadUrl(_url);

    不出意外的话会看到加载的H5页面了。

    2,H5怎么调用安卓定义的方法

          首先定义一个类,写上供H5调用的方法,注意这个方法要用@JavascriptInterface修饰,代码如下所示:

    1. public class Mine {
    2. private Context context;
    3. public Mine(Context _context){
    4. this.context = _context;
    5. }
    6. @JavascriptInterface
    7. public void loginOut(){
    8. ((MainActivity) context).loginOut();
    9. }
    10. }

    然后注册这个类,如下所示:

    webView.addJavascriptInterface(new Mine(this.getActivity()), "mineInterface");

    这样安卓端就写好了。接下来就是H5端调用了。

    window.mineInterface.loginOut();

    H5端直接这么调用就可以了。

    如果js想传递json对象参数给安卓端怎么办,不要直接写json对象,要转换为json字符串,代码如下:

    1. window.mineInterface.loginOutTest(JSON.stringify({
    2. title: "iot",
    3. name: "iot"
    4. }));

    安卓端接收如下:

    1. @JavascriptInterface
    2. public void loginOutTest(String params){
    3. Log.d(AppYunlanLink.TAG, "test: " + params);
    4. }

    3,安卓怎么调用H5定义的方法

    H5 我是用的vue 框架,方法写在了页面内,如下所示:

    1. created() {
    2. window.setUserInfo = this.setUserInfo; //android app 会调用此方法
    3. },
    4. methods: {
    5. setUserInfo(userInfo) {
    6. const _userInfo = JSON.parse(userInfo);
    7. this.userName = _userInfo.username;
    8. this.avatar = _userInfo.avatar;
    9. }
    10. },

    注意方法一定要挂载到window对象上。安卓端怎么调用呢?

    1. //调用html5 页面中的方法,带JSONObject类型参数
    2. public void loadWebViewFuncWithJSON(String funcName, JSONObject value) {
    3. webView.post(new Runnable() {
    4. @Override
    5. public void run() {
    6. String _url = "javascript:" + funcName + "('" + value + "')";
    7. Log.d(AppYunlanLink.TAG, "value is: " + value);
    8. webView.loadUrl(_url);
    9. }
    10. });
    11. }
    12. fg4.loadWebViewFuncWithJSON("setUserInfo", info);

    这是带有参数的调用,安卓端是JSONObject类型的,H5端接收的是json字符串。不带参数的调用更简单了,如下:

    1. //调用html5 页面中的方法
    2. public void loadWebViewFunc(String funcName) {
    3. String _url = "javascript:" + funcName + "()";
    4. webView.loadUrl(_url);
    5. }

  • 相关阅读:
    【Proteus仿真】【STM32单片机】便携式血糖仪
    javaweb——socket
    maven打包项目,然后给其他项目引用
    c#学生管理系统
    再来一次,新技术搞定老业务「GitHub 热点速览 v.22.44」
    软件卸载quickuninstall
    spring2:IOC思想和DI思想(基于xml)
    武汉新时标文化传媒有限公司短视频用户规模达9.54亿
    Golang图像处理实战:image/png包的应用详解
    软考高项-项目管理概述-1
  • 原文地址:https://blog.csdn.net/liubangbo/article/details/126437690