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