uni-app(四):原生插件开发(Android)

2024-07-16 1626阅读

原生插件开发

    • 原生插件开发
    • `module`
      • 1.创建模块
      • 2.解决报错
      • 3.修改依赖
      • 4.编写插件代码
      • 5.添加插件配置
      • 6.引入模块
      • 7.调用插件代码
      • 8.运行
      • `component`
        • 1.创建模块
        • 2.解决报错
        • 3.修改依赖
        • 4.编写插件代码
        • 5.添加插件配置
        • 6.引入模块
        • 7.调用插件代码
        • 8.运行

          原生插件开发

          主要分为两类扩展:

          Module: 扩展非 UI 的特定功能

          Component: 扩展实现特别功能的 Native 控件

          module

          1.创建模块

          uni-app(四):原生插件开发(Android)

          2.解决报错

          uni-app(四):原生插件开发(Android)

          uni-app(四):原生插件开发(Android)

          3.修改依赖

          uni-app(四):原生插件开发(Android)

          4.编写插件代码

          package com.test.uniplugin_module;
          import android.content.Intent;
          import android.util.Log;
          import com.alibaba.fastjson.JSONObject;
          import io.dcloud.feature.uniapp.annotation.UniJSMethod;
          import io.dcloud.feature.uniapp.bridge.UniJSCallback;
          import io.dcloud.feature.uniapp.common.UniModule;
          public class TestModule extends UniModule {
              String TAG = "TestModule";
              public static int REQUEST_CODE = 1000;
              //run ui thread
              @UniJSMethod(uiThread = true)
              public void testAsyncFunc(JSONObject options, UniJSCallback callback) {
                  Log.e(TAG, "testAsyncFunc--" + options);
                  if (callback != null) {
                      JSONObject data = new JSONObject();
                      data.put("code", "success");
                      callback.invoke(data);
                      //callback.invokeAndKeepAlive(data);
                  }
              }
              //run JS thread
              @UniJSMethod(uiThread = false)
              public JSONObject testSyncFunc() {
                  JSONObject data = new JSONObject();
                  data.put("code", "success");
                  return data;
              }
              @Override
              public void onActivityResult(int requestCode, int resultCode, Intent data) {
                  if (requestCode == REQUEST_CODE && data.hasExtra("respond")) {
                      Log.e("TestModule", "原生页面返回----" + data.getStringExtra("respond"));
                  } else {
                      super.onActivityResult(requestCode, resultCode, data);
                  }
              }
          }
          

          5.添加插件配置

          uni-app(四):原生插件开发(Android)

          6.引入模块

          uni-app(四):原生插件开发(Android)

          7.调用插件代码

            
              插件调用
            
          
          
            export default {
              data() {
                return {};
              },
              onLoad() {},
              methods: {
                test() {
                  const testModule = uni.requireNativePlugin("TestModule");
                  testModule.testAsyncFunc(
                    {
                      name: "Lee",
                      age: 18,
                    },
                    (res) => {
                      uni.showToast({
                        icon: "none",
                        title: JSON.stringify(res),
                      });
                    }
                  );
                },
              },
            };
          
          

          8.运行

          uni-app(四):原生插件开发(Android)

          component

          1.创建模块

          uni-app(四):原生插件开发(Android)

          2.解决报错

          与上同

          3.修改依赖

          dependencies {
              compileOnly fileTree(dir: 'libs', include: ['*.jar'])
              compileOnly fileTree(dir: '../simpleDemo/libs', include: ['uniapp-v8-release.aar'])
          }
          

          4.编写插件代码

          package com.test.uniplugin_component;
          import android.content.Context;
          import android.graphics.Color;
          import android.widget.TextView;
          import java.util.HashMap;
          import java.util.Map;
          import io.dcloud.feature.uniapp.UniSDKInstance;
          import io.dcloud.feature.uniapp.annotation.UniJSMethod;
          import io.dcloud.feature.uniapp.ui.action.AbsComponentData;
          import io.dcloud.feature.uniapp.ui.component.AbsVContainer;
          import io.dcloud.feature.uniapp.ui.component.UniComponent;
          import io.dcloud.feature.uniapp.ui.component.UniComponentProp;
          public class TestComponent extends UniComponent {
              public TestComponent(UniSDKInstance instance, AbsVContainer parent, AbsComponentData basicComponentData) {
                  super(instance, parent, basicComponentData);
              }
              @Override
              protected TextView initComponentHostView(Context context) {
                  TextView textView = new TextView(context);
                  textView.setTextSize(20);
                  textView.setTextColor(Color.BLACK);
                  return textView;
              }
              @UniComponentProp(name = "tel")
              public void setTel(String telNumber) {
                  getHostView().setText("tel: " + telNumber);
                  Map params = new HashMap();
                  Map number = new HashMap();
                  number.put("tel", telNumber);
                  //目前uni限制 参数需要放入到"detail"中 否则会被清理
                  params.put("detail", number);
                  fireEvent("onTel", params);
              }
              @UniJSMethod
              public void clearTel() {
                  getHostView().setText("");
              }
              @Override
              public void onActivityResume() {
                  super.onActivityResume();
              }
              @Override
              public void onActivityPause() {
                  super.onActivityPause();
              }
              @Override
              public void onActivityDestroy() {
                  super.onActivityDestroy();
              }
          }
          

          5.添加插件配置

          uni-app(四):原生插件开发(Android)

          6.引入模块

          uni-app(四):原生插件开发(Android)

          7.调用插件代码

          注意:需要将.vue文件修改为.nvue文件

          	
          		
          	
          
          
          	export default {
          		data() {
          			return {}
          		},
          		onLoad() {
          		},
          		methods: {
          			onTel(e) {
          				console.log("onTel=" + e.detail.tel);
          			},
          			myTextClick(e) {
          				this.$refs.telText.clearTel();
          			},
          		},
          	}
          
          

          8.运行

          uni-app(四):原生插件开发(Android)

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]