前言

Capacitor 自定义插件 实现WebView中访问的自定义Android代码

最近在工作中使用Vue+Vant+Capacitor 开发打包移动端应用,因业务需求需与原生的Android进行数据通信,通过webview访问原生Android中的数据,即Android 与 js 互调。

怎么使用Capacitor打包Vue移动端项目,见之前的一篇文章:
Capacitor+Vue+Vant移动端打包总结

下面是亲测实现了基于Capacitor中Android和js互调。

WebView可访问的本机代码

生成需要在WebView中访问的自定义本机代码的最简单方法是为其构建本地Capacitor插件。在这种情况下,构建插件就像构建一个继承自com.getcapacitor.Plugin并使用@NativePlugin()and @PluginMethod()注释的类一样简单。

一、 自定义插件CustomNativePlugin

package xxxxxxx;import android.content.Context;import android.database.Cursor;import android.net.Uri;import android.util.Log;import com.getcapacitor.JSObject;import com.getcapacitor.NativePlugin;import com.getcapacitor.Plugin;import com.getcapacitor.PluginCall;import com.getcapacitor.PluginMethod;/** * Capacitor CustomNativePlugin 自定义插件 * */@NativePlugin()public class CustomNativePlugin extends Plugin {  /**   * customCall 获取加密用户信息   */  @PluginMethod()  public void customCall(PluginCall call) {    //String message = call.getString("value");    String encryptParams = getParams(MainActivity.getContent());    JSObject jsObject = new JSObject();    jsObject.put("encryptParams",encryptParams);    call.success(jsObject);  }  @PluginMethod()  public void customFunction(PluginCall call) {    // More code here...    JSObject jsObject = new JSObject();    try {      //添加      jsObject.put("name", "张三");//      System.out.println(jsonObject.toString());    } catch (Exception e) {      e.printStackTrace();    }//    Log.d("MSG", jsObject.toString());    call.resolve(jsObject);  }}

二、在Activity中注册插件:

package xxxx;import android.content.Context;import android.os.Bundle;import com.getcapacitor.BridgeActivity;import com.getcapacitor.Plugin;import java.util.ArrayList;public class MainActivity extends BridgeActivity {  public static Context context;  @Override  public void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    context = this.getApplicationContext();    // Initializes the Bridge    this.init(savedInstanceState, new ArrayList<Class<? extends Plugin>>() {{      // Additional plugins you've installed go here      // Ex: add(TotallyAwesomePlugin.class);      add(CustomNativePlugin.class);    }});  }  /**   * @return  content   * */  public static Context getContent(){    return context;  }}

三、在webView代码中使用函数:

import { Plugins } from "@capacitor/core";const { CustomNativePlugin } = Plugins;      /**       * 接收Android Capacitor 插件传递过来参数       * */      async getLaunchUrl() {        let param = '';        const ret = await CustomNativePlugin.customCall();        param = ret.encryptParams        return param;      }

Capacitor实现WebView中访问的自定义Android代码_第1张图片
代码结构:
Capacitor实现WebView中访问的自定义Android代码_第2张图片

参考
Capacitor Custom Native Code

有关插件API的更多用法,请参阅Capacitor Android Plugin Guide。

更多相关文章

  1. Android:设置圆形头像,Android截取圆形图片
  2. (4.1.21.4)Android Handler 异步消息处理机制的妙用 创建强大的图
  3. [转]Android 应用初始化及窗体事件(按键)的分发 [此博文包含图片]
  4. Android复制assets目录下的图片到内存
  5. Android JSON解析示例代码
  6. Android单张图片查看、单指移动、双指缩放、双击最大化或最小化

随机推荐

  1. 如何使用Thymleaf做到这一点?
  2. Python探究之旅—Python语言的基本认识
  3. 如何在Apache POI(java)中读取.docx中的字
  4. 怎么在html,Javascript,vBscript中实现从
  5. Java多线程之Thread、Runnable、Callable
  6. BufferedImage到InputStream - 格式不同
  7. 20145122《 Java网络编程》实验五实验报
  8. java操作ftp实现文件的上传下载(适用于图
  9. ***100分,谁有用java mail做的把表单直接
  10. 急求用jersey2.x+spring3.x 开发rest web