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

07-16 1624阅读

原生插件开发

    • 原生插件开发
    • `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购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]