• 安卓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. }

  • 相关阅读:
    各种ide配置gitignore的模版文件内容
    Hadoop-HDFS架构与设计
    WebGL(ThreeJS)加载乐高Ldraw模型案例
    二次确认弹窗提示
    论文参考文献的引入要留意什么信息呢?
    Javascript命令模式
    SkeyeGisMap地图扩展(四) 添加动态目标
    flink命令行提交jar包任务
    【SwiftUI模块】0015、SwiftUI自定义音频播放器
    为什么要学MySQL数据库,它有什么用?
  • 原文地址:https://blog.csdn.net/liubangbo/article/details/126437690