当前位置: 首页 > article >正文

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.MyBinder
		nfcBinder?.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 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');
			this.nfcService = service;
		},
		onServiceDisconnected: function(name) {
			console.log("服务已断开", name);
			this.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);
}

http://www.kler.cn/a/445027.html

相关文章:

  • C# winform 字符串通过枚举类型转成int类型的数据
  • 2024年合肥师范学院信息安全小组内部选拔赛(c211)WP
  • 使用 esrally race 测试 Elasticsearch 性能:实践指南
  • 有关异步场景的 10 大 Spring Boot 面试问题
  • ios 混合开发应用白屏问题
  • 关于数据流图绘制和使用上的一些个人经验
  • 《军工记忆》第二季播出,科技创新铸国之重器
  • mybatis逆向工程插件MyBatisX使用介绍
  • 裸金属服务器和传统服务器的区别
  • XLSTM+informer时间序列预测模型
  • 深入理解 Linux wc 命令
  • 【开源免费】基于Vue和SpringBoot的在线宠物用品交易网站(附论文)
  • WebGL入门到进阶教程 - 系统学习Web3D技术
  • 依托 SSM 与 Vue 的电脑测评系统:展现电脑真实实力
  • Unity Shader学习日记 part 2 线性代数--矩阵
  • 搭建 Elasticsearch 集群:完整教程
  • 分布式链路追踪简介-01-dapper 论文思想介绍
  • linux部分rpm包总结描述
  • libilibi项目总结(17)Elasticsearch 的使用
  • 搭建私有链
  • C++ 引用的基本用法
  • 403 Forbidden HTTP 响应状态码
  • 大模型在研发提效方面的实践(附最佳实践资料)
  • uniapp自定义树型结构数据弹窗,给默认选中的节点,禁用所有子节点
  • electron 顶部的元素点不中,点击事件不生效
  • 模组 RG500Q入网问题分析