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

原生插件开发

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

原生插件开发

主要分为两类扩展:

Module: 扩展非 UI 的特定功能

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

module

1.创建模块

在这里插入图片描述

2.解决报错

在这里插入图片描述

在这里插入图片描述

3.修改依赖

在这里插入图片描述

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;}@Overridepublic 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.添加插件配置

在这里插入图片描述

6.引入模块

在这里插入图片描述

7.调用插件代码

<template><view><button type="primary" @click="test()">插件调用</button></view>
</template><script>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),});});},},};
</script>

8.运行

在这里插入图片描述

component

1.创建模块

在这里插入图片描述

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<TextView> {public TestComponent(UniSDKInstance instance, AbsVContainer parent, AbsComponentData basicComponentData) {super(instance, parent, basicComponentData);}@Overrideprotected 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<String, Object> params = new HashMap<>();Map<String, Object> number = new HashMap<>();number.put("tel", telNumber);//目前uni限制 参数需要放入到"detail"中 否则会被清理params.put("detail", number);fireEvent("onTel", params);}@UniJSMethodpublic void clearTel() {getHostView().setText("");}@Overridepublic void onActivityResume() {super.onActivityResume();}@Overridepublic void onActivityPause() {super.onActivityPause();}@Overridepublic void onActivityDestroy() {super.onActivityDestroy();}
}

5.添加插件配置

在这里插入图片描述

6.引入模块

在这里插入图片描述

7.调用插件代码

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

<template><view><TestComponent ref="telText" tel="12305" style="width:200px;height:100px;" @onTel="onTel" @click="myTextClick"></TestComponent></view>
</template><script>export default {data() {return {}},onLoad() {},methods: {onTel(e) {console.log("onTel=" + e.detail.tel);},myTextClick(e) {this.$refs.telText.clearTel();},},}
</script>

8.运行

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/11370.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

EfficientNet网络结构详细解读+SE注意力机制+pytorch框架复现

文章目录 &#x1f680;&#x1f680;&#x1f680;前言一、1️⃣ 网络详细结构1.1 &#x1f393; MBConv结构1.2 ✨SE注意力机制模块1.3 ⭐️Depthwise Separable Convolution深度可分离卷积1.3.1 普通卷积操作(Convolution)1.3.2 逐深度卷积&#xff08;Depthwise Convoluti…

【强训笔记】day21

NO.1 思路&#xff1a;第一个位置放最小的&#xff0c;其次放最大的&#xff0c;依次类推。 代码实现&#xff1a; #include<iostream>using namespace std; int n;int main() {cin>>n;int left1,rightn;while(left<right){cout<<left<<" &…

Nios-II编程

文章目录 一硬件部分设计1Qsys2Quartus 二软件1Nios-II Eclipse 三运行项目及效果1配置 FPGA 一硬件部分设计 1Qsys 1创建一个项目 2点击 Tools 下拉菜单下的 Platform Designer 工具&#xff0c;启动 Platform Designer 后&#xff0c;点击 File-save&#xff0c;在文件名中…

云原生基础设施和操作系统分论坛 03-在Kubernetes上运行Apache Spark进行大规模数据处理的实践【数据分析】

https://spark.apache.org/视频观看&#xff1a;https://www.bilibili.com/video/BV17J4m1n7Gv/?spm_id_from333.999.0.0 简介 Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop…

SpringBoot项目中基于PDF模板生成PDF文档

&#x1f341; 作者&#xff1a;知识浅谈&#xff0c;CSDN签约讲师&#xff0c;CSDN博客专家&#xff0c;华为云云享专家&#xff0c;阿里云专家博主 &#x1f4cc; 擅长领域&#xff1a;全栈工程师、爬虫、ACM算法 &#x1f492; 公众号&#xff1a;知识浅谈 &#x1f525; 微…

Java入门基础学习笔记20——三元运算符、运算符优先级

1、三元运算符介绍&#xff1a; 格式&#xff1a; 条件表达式 ? 值1: 值2 执行流程&#xff1a;首先计算关系表达式的值&#xff0c;如果值为true&#xff0c;就返回值1&#xff0c;如果值为false&#xff0c;就返回值2。 例1&#xff1a; package cn.ensource.operator;p…

企业级WEB服务Nginx安装

企业级WEB服务Nginx安装 1. Nginx版本和安装方式 Mainline version 主要开发版本,一般为奇数版本号,比如1.19Stable version 当前最新稳定版,一般为偶数版本,如:1.20Legacy versions 旧的稳定版,一般为偶数版本,如:1.18Nginx安装可以使用yum或源码安装,但是推荐使用源码编译安…

深圳盐田某前沿研究所:OLED透明屏引领未来科技空间

产品&#xff1a;55寸OLED透明屏 项目时间&#xff1a;2024年04月 项目地点&#xff1a;深圳盐田 在科技日新月异的今天&#xff0c;前沿的研究机构不仅追求科研的突破&#xff0c;也在不断探索和尝试将最新科技融入其工作环境之中。深圳盐田的一家前沿研究所便是这一探索的先…

钉钉群直播回放保存下来方法

想要永久留存那些不容错过的钉钉群直播精华吗&#xff1f;你是否曾在群直播结束后急切地希望重温那些信息满载的讲解&#xff0c;或是那些激动人心的讨论时刻&#xff1f;现在&#xff0c;你不再需要担忧这些宝贵内容的丢失。这里&#xff0c;我们将带领你通过一些简单的步骤&a…

沃比得 DP16A 对数周期天线 100MHz~6GHz

沃比得DP16A对数周期天线该天线可用做超短波发射或接收天线&#xff0c;工作频率为 100MHz&#xff5e;6GHz。具 有频带宽&#xff0c;性能可靠&#xff0c;增益高等优点&#xff0c;是理想的无线电频谱管理、EMC 测试、电子对抗等领域 的定向接收、发射天线。 应用领域 ●…

搞懂Docker(八)- 多容器app

获取示例程序 示例程序 或者 示例程序 获取示例程序程序结构如下├── getting-started-app/ │ ├── package.json │ ├── README.md │ ├── spec/ │ ├── src/ │ └── yarn.lock多容器app 到目前为止,我们学的都是只包含一个容器的程序。但是现在,我们需要…

在线业务的常见全栈故障种类与定位手段

在线系统的稳定性和可靠性是企业数字化转型成功的关键。然而&#xff0c;由于云环境和系统演进的复杂性&#xff0c;故障的发生几乎不可避免。本系列文章将对在线系统可能遇到的全栈故障进行分类&#xff0c;并结合网上的案例分析&#xff0c;对比常规分析诊断手段与Originx推理…

美国空军高调展示首个AI战斗机!部长亲自试驾全程未干预,10万行代码试飞21次

【新智元导读】美军战斗机&#xff0c;能由AI完成自主空战了&#xff01;最近&#xff0c;美国空军部长Kendall亲自试驾了国防部正在研制的X-62A AI飞机。1小时的飞行过程中&#xff0c;Kendall全程未干预&#xff0c;所有动作都由AI自主完成。 最近&#xff0c;军事圈被这个消…

【JAVA】方法的使用

上一篇我们讲述了程序相关逻辑控制&#xff0c;这节我们来说说方法的使用。 1. 方法概念及使用 1.1 什么是方法(method) 方法就是一个代码片段. 类似于 C 语言中的 "函数"。方法存在的意义(不要背, 重在体会): 是能够模块化的组织代码(当代码规模比较复杂的时候).…

UKP3d,修改管道长度或标高的方法

南京用户问&#xff0c;请问这个起末点标高可以修改么&#xff1f;如图&#xff1a; 上述起末点的标高是不可以修改&#xff0c;用户没有详细阐述自已想要的结果。可能是以下几种场景&#xff0c;希望能帮助到用户&#xff1a; 1.修改管道长度&#xff1a; 1.1.(管道在模型的…

APP反抓包 - 客户端证书验证

一,校验的原理 下图为HTTP协议的请求过程:传输过程中都是明文数据 下图为HTTPS协议的请求过程: 注意:公钥加密的数据只能通过对应的私钥才能解密,就算是进行加密的公钥也不能进行解密。 上述的请求过程看似复杂,实际就是两部分: 通过公钥与私钥同步对称密钥使用对…

【C++】优先级队列与仿函数

&#x1f525;个人主页&#xff1a;北辰水墨 &#x1f525;专栏&#xff1a;C学习仓 本节内容我们来讲解优先级队列和仿函数。文中会附上优先级队列模拟实现的源码。 注意&#xff1a;本节我会把最大优先级队列和大堆名词混着用&#xff0c;他们两个本质是一样的。 一、priori…

Java并发编程:Thread原理解析和协程介绍

文章目录 一、java中的thread和操作系统中的Thread对应关系二、协程 一、java中的thread和操作系统中的Thread对应关系 在java中用户线程和内核线程是1:1的形式&#xff1a; 其中java层面创建的线程为用户线程&#xff0c;其对应的底层线程为内核线程。 Java生成线程的流程如…

使用GitLab自带的CI/CD功能在本地部署.Net8项目(二)

前置内容&#xff1a; 通过Docker Compose部署GitLab和GitLab Runner&#xff08;一&#xff09; 目录 一、创建代码仓库 二、创建GitLabRunner 三、注册Runner 四、配置Runner&#xff0c;绑定宿主Docker 五、创建.Net8WebApi项目进行测试 六、总结 一、创建代码仓库 …

【Redis7】10大数据类型之Stream类型

文章目录 1. Stream简介2. 生产消息命令(XADD)3. 查询相关命令3.1 获取指定范围内的消息(XRANGE)3.2 逆序获取指定范围内的消息(XREVRANGE)3.3 返回消息的数量(XLEN) 4. 删除消息命令(XDEL)5. 截取消息命令(XTRIM)6. 消费消息命令(XREAD)7. 消费者组管理命令7.1 创建消费者组(X…