pda广播有两种形式
- 聚焦显示数据
- 广播
等等...具体选择哪个根据设备和实际需求
我这边选择广播【聚焦总会弹出系统键盘,暂时没有更好的办法可以去掉闪现】
新建一个【pdaScan.ts】
export class BroadcastScan {
private main: any
private filter: any
private receiver: any
private tag = false
constructor() {}
init(onReceive: (code: string) => void) {
this.main = plus.android.runtimeMainActivity()
const IntentFilter = plus.android.importClass('android.content.IntentFilter')
this.filter = new IntentFilter()
// 扫描设置的广播名称【设备上设置的】
this.filter.addAction('...')
const that = this
this.receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {
onReceive: function (context: any, intent: any) {
plus.android.importClass(intent)
// 扫描设置的开发者选项--键值名称【设备上设置的】
const code = intent.getStringExtra('...')
// 业务
//防重复
if (that.tag) return
that.tag = true
setTimeout(() => {
that.tag = false
}, 150)
//到这里扫描成功了,可以调用自己的业务逻辑,code就是扫描的结果 return出code进行业务处理
onReceive && onReceive(code)
},
})
}
start() {
if (this.receiver) this.main.registerReceiver(this.receiver, this.filter)
}
stop() {
if (this.receiver) this.main.unregisterReceiver(this.receiver)
}
}
然后在需要监听的页面引入使用即可
import { BroadcastScan } from '@/utils/pdaScan'
const broadcastScan = new BroadcastScan()
.................
onLoad(() => {
console.log('加载 - onLoad')
const fn = (code: string) => {
console.log('code', code)
scanCode.value = code
}
broadcastScan.init(fn)
})
onShow(() => {
broadcastScan.start()
})
onUnmounted(() => {
broadcastScan.stop()
})
onHide(() => {
broadcastScan.stop()
})