背景:
设备: 鸿合 电子班牌 刷卡对接 WS-B22CS, 安卓11;
需求: 将刷卡器的数据传递到自己的App中, 作为上下岗信息使用, 以完成业务;
对接方式:
1. 厂家技术首先推荐使用 接收自定义广播的方式来获取, 参考代码如下
对应到uniApp 中的实现如下
<template>
<view class="content">
<text class="title">内容: {{cardnumber}}</text>
</view>
</template>
<script>
var main, receiver, filter;
export default {
name: 'GetCardNumber',
data() {
return {
cardnumber: ''
}
},
created: function(option) {
this.init();
setTimeout(() => {
this.start();
}, 2000)
},
onHide: function() {
this.stop();
},
destroyed: function() {
this.stop();
},
methods: {
init() {
let _this = this;
main = plus.android.runtimeMainActivity(); //获取activity
var IntentFilter = plus.android.importClass('android.content.IntentFilter');
filter = new IntentFilter();
filter.addAction("android.intent.action.getcardnumber"); // 换你的广播动作
receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {
onReceive: function(context, intent) {
plus.android.importClass(intent);
let code = intent.getStringExtra("cardnumber"); // 换你的广播标签
console.log('code', code)
_this.cardnumber = code
}
});
},
start() {
main.registerReceiver(receiver, filter);
},
stop() {
main.unregisterReceiver(receiver);
},
}
}
</script>
2. 使用uniApp 市场的 Fvv-UniSerialPort 插件实现与设备串口交互, 读取数据并转换
https://github.com/looooooooooooooooooooooool/UniSerialPort/tree/master/uni-app/nativeplugins/Fvv-UniSerialPort
安卓串口通信 Fvv-UniSerialPort - DCloud 插件市场
<template>
<view class="content">
<text class="title">读取到的内容: {{cardnumber}}</text>
</view>
</template>
<script>
const serialPort = uni.requireNativePlugin('Fvv-UniSerialPort')
export default {
name: 'GetCardNumber',
data() {
return {
cardnumber: '1111111111'
}
},
created: function(option) {
serialPort.getAllDeviceList(res => {
console.log('//设备列表', res)
})
serialPort.getAllDevicePath(res => {
console.log('//路径列表', res)
}),
setTimeout(() => {
serialPort.setPath('/dev/ttyS3')
serialPort.setBaudRate(9600)
serialPort.open(res => {
if (!res.status) {
uni.showToast({
title: res.msg,
duration: 2000,
icon: "none"
});
return
}
uni.showToast({
title: "已打开",
duration: 2000,
});
serialPort.onMessageHex(rec => {
console.log(rec)
this.cardnumber += rec + "\r\n"
}, send => {
console.log(send)
})
})
}, 10000)
},
}
</script>
注意事项:
1. 使用 Fvv-UniSerialPort 插件时, 控制台一直报错
==> 因为你编辑完代码就直接调试的原因, 你编辑完代码重启app再调试就可以了, 而且串口不要多次打开和关闭,直接在全局的地方打开一次,不用关闭的
2. 读卡出来内容不完整或不一样
==> 指令要按照设备的文档来处理分割和拼接之后再使用
附一张设备实物图