之前的项目要实现识别RFID的功能,那我们得先知道RFID是什么
RFID是什么
射频识别(英语:Radio Frequency IDentification,缩写:RFID)是一种无线通信技术,可以通过无线电信号识别特定目标并读写相关数据,而无需识别系统与特定目标之间建立机械或者光学接触。
无线电的信号是通过调成无线电频率的电磁场,把数据从附着在物品上的标签上传送出去,以自动辨识与追踪该物品。某些标签在识别时从识别器发出的电磁场中就可以得到能量,并不需要电池;也有标签本身拥有电源,并可以主动发出无线电波(调成无线电频率的电磁场)。标签包含了电子储存的信息,数米之内都可以识别。与条形码不同的是,射频标签不需要处在识别器视线之内,也可以嵌入被追踪物体之内。
许多行业都运用了射频识别技术。将标签附着在一辆正在生产中的汽车,厂方便可以追踪此车在生产线上的进度。仓库可以追踪药品的位置。射频标签也可以附于牲畜与宠物上,方便对牲畜与宠物的积极识别(防止数只牲畜使用同一个身份)。射频识别的身份识别卡可以使员工得以进入建筑锁住的部分,汽车上的射频应答器也可以用来征收收费路段与停车场的费用。
RFID长这个样子
手持机长这个样子
实现的方法
下述代码为
scan.vue
RFID扫码识别组件
这要用到H5+中plus.android
里面的方法,具体实现方法如下
<template>
<view class="scanContent"></view>
</template>
<script>
var main,receiver,filter;
var _codeQueryTag = false;
export default {
data() {
return {
scanCode: '',
url:{
xxx: '...', // 需要手持机获取到的数据后调用的接口(业务接口)
}
}
},
created: function (option) {
this.initScan()
this.startScan();
},
onHide:function(){
this.stopScan();
},
destroyed:function(){
/*页面退出时一定要卸载监听,否则下次进来时会重复,造成扫一次出2个以上的结果*/
this.stopScan();
},
methods: {
initScan() {
let _this = this;
main = plus.android.runtimeMainActivity();//获取activity
var IntentFilter = plus.android.importClass('android.content.IntentFilter');
filter = new IntentFilter();
// android.intent.ACTION_DECODE_DATA
filter.addAction("android.intent.action.scanner.RFID"); // 换你的广播动作 net.deniro.android.MY_BROADCAST
receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver',{
onReceive: function(context, intent) {
plus.android.importClass(intent);
let code = intent.getStringExtra("data");// 换你的广播标签
// for(let i = 1; i < 3; i++){
_this.queryCode(code);
// }
},
});
},
startScan(){
main.registerReceiver(receiver,filter);
},
stopScan(){
main.unregisterReceiver(receiver);
},
// 这里的code就是获取到时数据信息
queryCode: function(code){
//防重复
if(_codeQueryTag)return false;
_codeQueryTag = true;
setTimeout(function(){
_codeQueryTag = false;
},150);
},
}
}
</script>
<style>
page {
background-color: #efeff4;
}
.scanContent {
text-align: center;
}
</style>
在组件中使用
<template>
<view>
<scan></scan>
</view>
</template>
<script>
import scan from '@/components/scan/scan.vue'
export default {
components: {
scan
},
methods: {
test(){
// 触发识别
uni.$off('scanData') // 每次进来先 移除全局自定义事件监听器
uni.$on('scanData', function(data) {
console.log('扫码结果:', data.data);
})
}
}
}
</script>
评论区