uniapp Native.js 调用安卓arr原生service
最近搞了个uni小项目,一个定制的小平板,带一个nfc设备,厂家只给了一套安卓原生demo,头一次玩原生安卓,废了好半天劲打出来arr包,想镶进uniapp里,网上查了好久,都是错的,要么无法运行,要么运行了没反应,要么编译都过不去。。。官网给的示例更是没有示例,主打一个用法全靠猜。。。
服务
厂家给了个NfcService 里面是继承自标准android.app.Service另一部分是个androidx.appcompat.app.AppCompatActivity页面,里面启动,调用的NfcService
java部分NfcService核心代码
private val connection = object : ServiceConnection {override fun onServiceConnected(p0: ComponentName?, p1: IBinder?) {Log.e(TAG, "onServiceConnected: ")nfcBinder = p1 as NfcService.MyBindernfcBinder?.openPort(model)}override fun onServiceDisconnected(p0: ComponentName?) {Log.e(TAG, "onServiceDisconnected: ")nfcBinder = null}
}override fun onCreate(savedInstanceState: Bundle?) {//无关代码太多,就不粘了//绑定服务bindService(Intent(this, NfcService::class.java), connection, Context.BIND_AUTO_CREATE)//一定条件后,解绑服务unbindService(connection)
}
从没接触过安卓原生,一下子就麻了,不知道在uni那边怎么用,找了半天找到了这个
uniapp的一个页面
//开启服务(无回值启动)二选一
startAppService(){const mainActivity = plus.android.runtimeMainActivity();const Context = plus.android.importClass('android.content.Context');const Intent = plus.android.importClass('android.content.Intent');const intent = new Intent();intent.setClassName(mainActivity, 'com.rt.lib_nfc.NfcService');const Bundle = plus.android.importClass('android.os.Bundle');var bundle = new Bundle();intent.putExtras(bundle);mainActivity.startForegroundService(intent)
},
//绑定服务(有回值启动)二选一
bindAppService(){const that = this;const main = plus.android.runtimeMainActivity();const Context = plus.android.importClass('android.content.Context');const Service = plus.android.importClass('android.app.Service');const Intent = plus.android.importClass('android.content.Intent');let serviceConnectionFunc = {onServiceConnected: function(name, service) {console.log("服务已连接", name, service);//service.openPort('READ');that.nfcService = service;},onServiceDisconnected: function(name) {console.log("服务已断开", name);that.nfcService = null;}};let serviceConnection = plus.android.implements('android.content.ServiceConnection', serviceConnectionFunc);const intent = new Intent();intent.setClassName(main, 'com.rt.lib_nfc.NfcService');main.bindService(intent, serviceConnection, Service.BIND_AUTO_CREATE);
},
//最终使用
testService(){let res = this.nfcService?.openPort('get');console.log('res ->', res);
}
安装到uniapp里
在uniapp根目录新建nativeplugins->lib_nfc_plugin->android文件夹,在里面放入arr文件

在lib_nfc_plugin文件夹下创建package.json文件(ps:记得删除注释)
{"name": "定制设备Android-NFC读卡",//显示名"id": "lib_nfc_plugin",//与文件夹名字保持一致"version": "0.0.2","description": "uni-app android原生插件 用来使用nfc读取m1卡",//描述"_dp_type": "nativeplugin","_dp_nativeplugin": {"android": {"plugins": [{"type": "module","name": "lib_nfc_plugin",//与文件夹名字保持一致"class": "com.rt.lib_nfc"}],"hooksClass": "","integrateType": "aar",//这个别改"dependencies": [],"compileOptions": {"sourceCompatibility": "1.8","targetCompatibility": "1.8"},"abis": ["armeabi-v7a","arm64-v8a","x86"],"minSdkVersion": 21,"useAndroidX": false,"permissions": ["android.permission.FOREGROUND_SERVICE"//权限,],"parameters": {"插件需要配置的参数名称, 如appid": {"des": "参数描述","key": "AndroidManifest.xml中添加meta-data节点!对应android:name属性值, 如GETUI_APPID","placeholder": "build.gradle中添加到manifestPlaceholders中的字段名"}}}}
}
打开项目根目录manifest.json文件,后点击安卓/ios用原生插件配置->选择本地插件勾选上点确定,


制作自定义调试基座
因为咱加了自定义插件,需要将其打入基座内部,点击你的项目名->运行->运行到手机或模拟器->制作自定义调试基座

等有一阵后,点击你的项目名->运行->运行到手机或模拟器->运行到Android App基座->使用自定义基座运行,再选择调试的机器

点击按钮调用startAppService或bindAppService即可启动服务
相关文章:
uniapp Native.js 调用安卓arr原生service
最近搞了个uni小项目,一个定制的小平板,带一个nfc设备,厂家只给了一套安卓原生demo,头一次玩原生安卓,废了好半天劲打出来arr包,想镶进uniapp里,网上查了好久,都是错的,要…...
C#代码实现把中文录音文件(.mp3 .wav)转为文本文字内容
我们有一个中文录音文件.mp3格式或者是.wav格式,如果我们想要提取录音文件中的文字内容,我们可以采用以下方法,不需要使用Azure Speech API 密钥注册通过离线的方式实现。 1.首先我们先在NuGet中下载两个包 NAudio 2.2.1、Whisper.net 1.7.3…...
【一文了解】C#重点-委托1
本篇文章来学习一下C#的委托,委托是C#中的一个重要概念,它允许将方法作为参数传递给其他方法。C#中的委托类似于C或C中的函数指针,并且类型安全。 委托 1.委托的定义 委托(delegate)是方法的代理/代表,委托…...
WPF+MVVM案例实战与特效(四十五)- 打造优雅交互:ListBox 的高级定制与行为触发(侧边菜单交互面板)
文章目录 1、引言2、案例效果3、案例实现1、依赖安装2、文件创建3、代码实现1、依赖引用与上下文2、个性化视觉效果:自定义 ItemContainerStyle3、页面样式与布局完整代码4、ViewModel 逻辑实现5、子界面代码:3、实现效果4、源代码获取5、总结1、引言 在WPF应用程序开发中,…...
新版Android Studio 2024.1.2版本,如何通过无线wifi连接手机实现交互
1、首先,先确定手机是否启动了开发者选项 在我的设备 -> 全部参数 -> MIUI版本点击6下 (有的手机是 关于手机 -> 查看手机版本 ) 2、在设置中搜索 开启开发者选项 3、进入开发者选项后,在 调试 中选择 无线调试并选择…...
VTK知识学习(26)- 图像基本操作(一)
1、前言 图像处理离不开一些基本的图像数据操作,例如获取和修改图像的基本信息、访问和修改图像像素值、图像显示、图像类型转换等。熟练掌握这些基本操作有助于使用 VTK进行图像处理应用程序的快速开发。 2、图像信息的访问与修改 1)利用vtkIamgeData…...
2024年9月AI头条新闻:创新与挑战并存
2024年9月AI头条新闻:创新与挑战并存 9月,人工智能领域继续高速发展,重大产品发布、伦理争议和技术突破交织在一起。让我们回顾一下本月最重要的AI新闻: OpenAI的o1:更强大的语言模型 OpenAI推出了o1,一个…...
[Xshell] Xshell的下载安装使用、连接linux、 上传文件到linux系统-详解(附下载链接)
前言 xshell 链接:https://pan.quark.cn/s/57062561e81a 提取码:TK4K 链接失效(可能被官方和谐)可评论或私信我重发 安装 下载后解压得到文件 安装路径不要有中文 打开文件 注意!360等软件会拦截创建注册表的行为&a…...
count(1)、count(_)与count(列名)的区别?
大家好,我是锋哥。今天分享关于【count(1)、count(_)与count(列名)的区别?】面试题。希望对大家有帮助; count(1)、count(_)与count(列名)的区别? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 SQL 中,…...
代码随想录训练营第二十七天| 贪心理论基础 455.分发饼干 376. 摆动序列 53. 最大子序和
贪心没有套路,说白了就是常识性推导加上举反例 今天的内容比较简单 简单了解贪心是通过局部最优解反推全局最优解(有经验成分) 455.分发饼干 题目链接:455. 分发饼干 - 力扣(LeetCode) 讲解链接ÿ…...
List直接使用removeAll报错
List直接使用removeAll报错 需要先将list转换才能使用 原因是: removeAll 方法在 Java 中用于从当前列表中删除另一个列表中存在的所有元素。如果直接对 List 接口的一个实现使用 removeAll 方法抛出异常,可能的原因有: 不同的List实现&am…...
Debian环境安装Docker Engine
Debian环境安装Docker Engine 卸载旧版本使用APT工具安装Docker设置存储库安装Docker设置权限 docker compose命令卸载Docker 卸载旧版本 要卸载的非官方软件包是: docker.iodocker-composedocker-docpodman-docker 此外,Docker Engine 依赖 containe…...
Python常用内置函数总结
目录 1. abs() 2. complex() 3. divmod() 4. eval() 5. float() 6. hash() 7. input() 8. int() 9. len() 10. list() 11. oct() 12. open() 13. pow() 14. print() 15. range() 16. reversed() 17. round() 18. sorted()…...
深入了解蓝牙Profile类型与设备的对应关系
在现代技术中,蓝牙作为一种无线通信技术,广泛应用于各种设备之间的短距离通信。不同的设备在连接时使用不同的蓝牙Profile(配置文件),每种Profile都为特定的设备功能提供支持,例如音频流传输、语音通话、文件传输等。在本文中,我们将详细介绍蓝牙Profile的常见类型及其对…...
[bug]java导出csv用Microsoft Office Excel打开乱码解决
[bug]java导出csv用Microsoft Office Excel打开乱码 现象 首先这个csv文件用macbook自带的 "Numbers表格" 软件打开是不乱码的, 但是使用者是Windows系统,他的电脑没有"Numbers表格"工具, 他用Microsoft Office Excel打开之后出现乱码,如下图…...
2023年区块链职业技能大赛——区块链应用技术(一)模块一
模块一:区块链产品方案设计及系统运维: 任务1-1:区块链产品需求分析与方案设计 1.依据给定区块链食品溯源系统的业务架构图,对考题进行业务分析,可能多的去考虑一个业务系统所需要的模块,使用Visio或思维导图工具展现本系统的基本设计概念和…...
4 软件工程——总体设计
一、设计过程 1.两个主要阶段 系统设计阶段:确定系统的具体实现方案结构设计阶段:确定软件结构 2.九个步骤 设想供选择的方案选取合理的方案推荐最佳方案功能分解设计软件结构设计数据库制定测试计划书写文档审查和复审 二、设计原理 1.模块化 模块…...
Elasticsearch:确保业务规则与语义搜索无缝协作
作者:来自 Elastic Kathleen DeRusso 利用查询规则与语义搜索和重新排序相结合的强大功能。 更多阅读: Elasticsearch 8.10 中引入查询规则 - query rules Elasticsearch 查询规则现已正式发布 - query rules 你是否知道查询规则(query ru…...
【大语言模型】ACL2024论文-33 Johnny 如何说服大型语言模型越狱:通过人性化 LLMs 重新思考挑战 AI 安全性的说服技巧
【大语言模型】ACL2024论文-33 Johnny 如何说服大型语言模型越狱:通过人性化 LLMs 重新思考挑战 AI 安全性的说服技巧 目录 文章目录 【大语言模型】ACL2024论文-33 Johnny 如何说服大型语言模型越狱:通过人性化 LLMs 重新思考挑战 AI 安全性的说服技巧目…...
【LuaFramework】LuaFramework_UGUI_V2框架学习
GitHub - jarjin/LuaFramework_UGUI_V2: 基于tolua的热更新框架V2 旧版本是Unity 5.0,这个是新版本支持更高版本的 导入工程后先清除wrap 然后重新生成wrap,你会发现有个报空null,框架的问题总结下所有的框架wrap相关报错问题和修复方法&…...
当Aurora IP遇上多板卡互联:灵活分配GT Quad与Lane的实战策略
Aurora IP在多板卡系统中的GT资源规划与实战技巧 在当今高速数据通信和雷达信号处理领域,多FPGA系统已成为主流架构。这类系统通常需要处理数十Gbps甚至上百Gbps的数据吞吐量,而Xilinx的Aurora协议配合GT高速串行收发器,为这种高带宽需求提供…...
Jmeter实战:如何用正则表达式提取登录cookie并跨线程组共享(附完整配置截图)
Jmeter实战:正则表达式提取登录Cookie与跨线程组共享的深度解析 在接口自动化测试中,Cookie管理一直是工程师们需要面对的典型挑战。想象这样一个场景:你需要测试一个电商平台的购物流程,从登录到浏览商品再到下单支付,…...
如何永久保存微信聊天记录?WeChatMsg数据自主管理完整指南
如何永久保存微信聊天记录?WeChatMsg数据自主管理完整指南 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/W…...
VOFA+不止能调PID:手把手教你用FireWater协议,把STM32的传感器数据变成酷炫波形图
VOFA与STM32的FireWater协议实战:打造多传感器数据可视化方案 在嵌入式开发中,数据可视化一直是提升调试效率的关键环节。传统方式往往需要开发者自行编写上位机软件或依赖复杂的第三方工具,而VOFA的出现改变了这一局面。这款开源免费的上位机…...
揭秘EMQX消息持久化:实战MySQL存储插件从零到一部署指南
揭秘EMQX消息持久化:实战MySQL存储插件从零到一部署指南 【免费下载链接】emqx_persistence_plugin 项目地址: https://gitcode.com/gh_mirrors/em/emqx_persistence_plugin 还在为EMQX消息丢失而烦恼吗?每次重启服务都担心数据不翼而飞…...
在PlatformIO+VSCode环境下为STM32L476与ST7789屏幕构建LVGL内存优化实战指南
1. 环境搭建与基础配置 在开始LVGL内存优化之前,我们需要先搭建好开发环境。PlatformIOVSCode的组合为嵌入式开发提供了极大的便利,特别是对于STM32这类MCU的开发。我最初接触这个组合时,就被它的高效所吸引,相比传统的Keil或IAR&…...
Untitled
import pandas as pddf pd.read_excel("./车辆行驶里程表-2.xlsx")df车辆ID启动时间停止时间启动时剩余电量停止时剩余电量启动时电池温度峰值速度平均速度01.02020-02-20 11:31:272020-02-20 11:59:4553451185.21931.8011.02020-02-20 07:52:512020-02-20 08:19:25…...
终极网页转Markdown工具:MarkDownload高效内容提取全攻略
终极网页转Markdown工具:MarkDownload高效内容提取全攻略 【免费下载链接】markdownload A Firefox and Google Chrome extension to clip websites and download them into a readable markdown file. 项目地址: https://gitcode.com/gh_mirrors/ma/markdownload…...
电脑越用越卡?用Mem Reduct轻松释放Windows内存的完整指南
电脑越用越卡?用Mem Reduct轻松释放Windows内存的完整指南 【免费下载链接】memreduct Lightweight real-time memory management application to monitor and clean system memory on your computer. 项目地址: https://gitcode.com/gh_mirrors/me/memreduct …...
ArcGIS Pro2.5深度学习实战:从数据标注到模型部署全流程解析
1. 数据标注:为深度学习准备高质量训练样本 在ArcGIS Pro2.5中进行深度学习的第一步就是数据标注,这相当于给AI准备"学习资料"。我刚开始接触时,以为随便标注几个样本就能训练出好模型,结果踩了不少坑。这里分享几个关键…...
