Android 小程序自定义双向通道

若已有小程序 API 或事件不满足开发需求,您可以自行扩展。

小程序调用原生自定义 API

  1. 客户端自定义 API 并注册。

    • 自定义 API:

      1. public class MyJSApiPlugin extends H5SimplePlugin {
      2. /**
      3. * 自定义 API
      4. */
      5. public static final String TINY_TO_NATIVE = "tinyToNative";
      6. @Override
      7. public void onPrepare(H5EventFilter filter) {
      8. super.onPrepare(filter);
      9. // onPrepare 中需要 add 进来
      10. filter.addAction(TINY_TO_NATIVE);
      11. }
      12. @Override
      13. public boolean handleEvent(H5Event event, H5BridgeContext context) {
      14. String action = event.getAction();
      15. if (TINY_TO_NATIVE.equalsIgnoreCase(action)) {
      16. JSONObject params = event.getParam();
      17. String param1 = params.getString("param1");
      18. String param2 = params.getString("param2");
      19. JSONObject result = new JSONObject();
      20. result.put("success", true);
      21. result.put("message", "客户端接收到参数:" + param1 + ", " + param2 + "\n返回 Demo 当前包名:" + context.getActivity().getPackageName());
      22. context.sendBridgeResult(result);
      23. return true;
      24. }
      25. return false;
      26. }
      27. }
    • 注册 API:启动小程序前全局注册一次即可。

      1. /*
      2. * 第一个参数,自定义 API 类的全路径
      3. * 第二个参数,BundleName,aar/inside 可以直接填 ""
      4. * 第三个参数,作用于页面级,可以直接填 "page"
      5. * 第四个参数,作用的 API,将你自定义的 API 以 String[] 的形式传入
      6. */
      7. MPNebula.registerH5Plugin(MyJSApiPlugin.class.getName(), "", "page", new String[]{MyJSApiPlugin.TINY_TO_NATIVE});
  2. 小程序调用。

    1. my.call('tinyToNative', {
    2. param1: 'p1aaa',
    3. param2: 'p2bbb'
    4. }, (result) => {
    5. console.log(result);
    6. my.showToast({
    7. type: 'none',
    8. content: result.message,
    9. duration: 3000,
    10. });
    11. })

原生向小程序发送自定义事件

  1. 小程序注册事件。

    1. my.on('nativeToTiny', (res) => {
    2. my.showToast({
    3. type: 'none',
    4. content: JSON.stringify(res),
    5. duration: 3000,
    6. success: () => {
    7. },
    8. fail: () => {
    9. },
    10. complete: () => {
    11. }
    12. });
    13. })
  2. 客户端发送事件

    1. H5Service h5Service = MPFramework.getExternalService(H5Service.class.getName());
    2. final H5Page h5Page = h5Service.getTopH5Page();
    3. if (null != h5Page) {
    4. JSONObject jo = new JSONObject();
    5. jo.put("key", value);
    6. // native 向小程序发送事件的方法
    7. // 第一个是事件名称,第二个是参数,第三个默认传 null
    8. h5Page.getBridge().sendDataWarpToWeb("nativeToTiny", jo, null);
    9. }

取消注册自定义事件

如不再需要自定义事件,请参见 取消注册自定义事件