export function useZebraScan() {
|
// pda的特色设置中需要关闭-禁止将扫描按键的键值传递给应用的开关
|
const mainActivity = ref(); // 运行时的主要活动activity
|
const intentFilter = ref(); // 实例化的意图过滤器
|
const broadcastReceiver = ref(); // 广播接收器
|
const repeatFlag = ref<boolean>(false);
|
|
const init = (onReceiveCallback: any) => {
|
console.log("初始化zebra扫描");
|
/* #ifdef APP-PLUS */
|
// 获取activity
|
mainActivity.value = plus.android.runtimeMainActivity();
|
// 导入类
|
const IntentFilter = plus.android.importClass("android.content.IntentFilter");
|
//实例化一个意图过滤器
|
intentFilter.value = new IntentFilter();
|
// addAction添加动作, com.android.server.scannerservice.broadcast为设备配置的广播名称
|
intentFilter.value.addAction("com.dwexample.ACTION");
|
// BroadcastReceiver广播接收器接口:implements 实现接口 onReceive实现接口的方法
|
broadcastReceiver.value = plus.android.implements(
|
"io.dcloud.feature.internal.reflect.BroadcastReceiver",
|
{
|
onReceive: (context: any, intent: any) => {
|
plus.android.importClass(intent);
|
// 扫描设置的开发者选项--手持机pda的广播键值scannerdata
|
const code = intent.getStringExtra("com.motorolasolutions.emdk.datawedge.data_string");
|
console.log("pda原始扫描数据:", code);
|
//防重复
|
if (repeatFlag.value) return;
|
repeatFlag.value = true;
|
setTimeout(() => {
|
repeatFlag.value = false;
|
}, 150);
|
// 到这里扫描成功,获取结果,可以调用自己的业务逻辑
|
onReceiveCallback(code);
|
},
|
}
|
);
|
console.log("注册广播成功");
|
/* #endif */
|
};
|
const start = () => {
|
console.log("开始扫描");
|
mainActivity.value.registerReceiver(broadcastReceiver, intentFilter);
|
};
|
const stop = () => {
|
console.log("停止扫描");
|
mainActivity.value.unregisterReceiver(broadcastReceiver);
|
};
|
//是否开启激光红外线扫描,true开启,false关闭
|
const triggerScan = () => {
|
console.log("触发扫描");
|
// 获取Android意图类
|
let Intent = plus.android.importClass("android.content.Intent");
|
// 实例化意图
|
let intent = new Intent();
|
// 定义意图,由厂商提供(此处设置为东大的: 开始扫描广播com.scan.onStartScan,对应的停止扫描广播为com.scan.onEndScan)
|
intent.setAction("com.symbol.datawedge.api.ACTION");
|
intent.putExtra("com.symbol.datawedge.api.SOFT_SCAN_TRIGGER", "START_SCANNING");
|
// 广播这个意图
|
mainActivity.value.sendBroadcast(intent);
|
};
|
return { init, start, stop, triggerScan };
|
}
|