创建uts 插件
- 创建uni_modules目录。

- 新建uts插件


- 放置第三方依赖在 libs中,如图所示

引入第三方SDK
-
引入格式; import 类名 from 包;
如:import UHFRManager from "com.handheld.uhfr.UHFRManager";
-
使用
ts
// app-android/index.uts
import UHFRManager from "com.handheld.uhfr.UHFRManager";
export const myApi : MyApi = function (options : MyApiOptions) {
console.log(options.paramA)
const instance = UHFRManager.getInstance()
options.success?.(instance);
options.complete?.(res);
}
ts
// pages/test/test.vue
<template>
<view>
<wd-button @click="testClick"> test</wd-button>
</view>
</template>
<script setup lang="ts">
// @ts-ignore
import {myApi} from "@/uni_modules/test-uts"
function testClick(){
myApi({
paramA: false,
success:(res:any)=> {
console.log(res);
}
})
}
</script>
- 打自定义调试基座
6. uniapp使用
插件使用示例
调试
事件管理
1、uts中
广播事件
js
public static registerKeyReceiver() {
let context = UTSAndroid.getAppContext(); // 获取 Application 上下文
let intentFilter = new IntentFilter();
intentFilter.addAction("android.rfid.FUN_KEY");
intentFilter.addAction("android.intent.action.FUN_KEY");
if (this.keyReceiver == null) {
this.keyReceiver = new KeyReceiver();
}
context!!.registerReceiver(this.keyReceiver, intentFilter); // 用 Application Context 进行注册
console.log("已注册按键广播接收器3");
}
注销广播事件
js
public static unregisterKeyReceiver() {
let context = UTSAndroid.getAppContext();
context!!.unregisterReceiver(this.keyReceiver);
console.log("已取消注册按键广播接收器1");
}
registerReceiver方法需要传入BroadcastReceiver类,新建一个类并重写onReceive方法
js
class KeyReceiver extends BroadcastReceiver {
constructor() {
super();
}
override onReceive(context : Context, intent : Intent) : void {
let keyCode = intent.getIntExtra("keyCode", 0);
console.log("keyCode = " + keyCode);
if (keyCode === 0) {
keyCode = intent.getIntExtra("keycode", 0);
}
let keyDown = intent.getBooleanExtra("keydown", false);
if (keyDown) {
// 按键按下时的处理逻辑(可自行添加)
} else {
// 按键松开时的处理逻辑
switch (keyCode) {
case KeyEvent.KEYCODE_F1:
break;
case KeyEvent.KEYCODE_F2:
break;
case KeyEvent.KEYCODE_F5:
break;
case KeyEvent.KEYCODE_F3: // C510x
case KeyEvent.KEYCODE_F4: // 6100
case KeyEvent.KEYCODE_F7: // H3100
this.onReadTag();
break;
}
}
}
//这里是事务处理
private onReadTag():void{
console.log("按键触发读取标签操作");
try{
rfidHelper.startScan().then(res=>{
let intent = new Intent("com.example.RFID_SCAN");
intent.putExtra("scannerdata", res.join(','));
console.log("发送数据",res);
console.log("--------------")
let context = UTSAndroid.getAppContext();
context!!.sendBroadcast(intent);
});
}catch(e){
console.log("rfid读取失败");
}
}
}
2、uniapp 中
接收广播 并使用eventbus转发消息给订阅者
ts
import { EventBus, EventKey } from './EventBus'
let main: any
let filter: any
let receiver: PlusAndroidInstanceObject
let tag: boolean = false
/**
* 开始广播监听扫码
* that:传this;
*/
function start() {
/* #ifdef APP-PLUS */
main.registerReceiver(receiver, filter)
/* #endif */
}
/**
* 停止广播监听扫码
* that:传this;
*/
function stop() {
/* #ifdef APP-PLUS */
main.unregisterReceiver(receiver)
/* #endif */
}
/**
* 剩余下个变量已经做了全局变量
*
* 定义广播
* that:传this;
*/
function init(onReceive?: any) {
/* #ifdef APP-PLUS */
// 获取activity
main = plus.android.runtimeMainActivity()
const IntentFilter = plus.android.importClass('android.content.IntentFilter') as any
// console.log(IntentFilter)
filter = new IntentFilter()
// console.log(filter)
// 扫描设置的广播名称
filter.addAction('com.android.server.scannerservice.broadcast') // 测试用
filter.addAction('com.example.RFID_SCAN')// rfid uts插件自定义
filter.addAction('com.rfid.SCAN')// 扫码
receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {
onReceive(context: any, intent: any) {
console.log('广播接收')
// console.log(context, intent)
plus.android.importClass(intent)
// 扫描设置的开发者选项--键值名称 scannerdata
const code = intent.getStringExtra('scannerdata')
//获取广播源
const action = intent.getAction();
switch(action){
case 'com.android.server.scannerservice.broadcast':
EventBus.emit(EventKey.TEST, code)
break;
case 'com.example.RFID_SCAN':
EventBus.emit(EventKey.RFIDEvent, code)
break;
case 'com.rfid.SCAN':
EventBus.emit(EventKey.ScanEvent, code)
break;
}
// 业务
// 防重复
if (tag) {
return
}
tag = true
setTimeout(() => {
tag = false
}, 150)
console.log(code)
// 到这里扫描成功了,可以调用自己的业务逻辑,code就是扫描的结果 return出code进行业务处理
if (onReceive) {
onReceive(code)
}
},
})
/* #endif */
}
function test() {
const Intent = plus.android.importClass('android.content.Intent') as any
const intent = new Intent('com.android.server.scannerservice.broadcast')
main = plus.android.runtimeMainActivity()
intent.putExtra('scannerdata', '123456789')
main.sendBroadcast(intent)
}
export const broadcastScan = {
init,
start,
stop,
test,
}