let main, receiver, filter; let _codeQueryTag = false; // 标记变量 export const initScan = () => { main = plus.android.runtimeMainActivity(); // 获取主 activity var IntentFilter = plus.android.importClass("android.content.IntentFilter"); filter = new IntentFilter(); const action = uni.getStorageSync('currentDeviceData').action // 获取动作 const stringExtra = uni.getStorageSync('currentDeviceData').stringExtra // 获取字符串额外参数 filter.addAction(action); // 添加广播动作 receiver = plus.android.implements( "io.dcloud.feature.internal.reflect.BroadcastReceiver", { onReceive: function (context, intent) { plus.android.importClass(intent); let code = intent.getStringExtra(stringExtra); // 获取广播中的字符串额外参数 console.log(code); queryCode(code); }, } ); }; export const startScan = () => { main.registerReceiver(receiver, filter); // 开始监听广播 }; export const stopScan = () => { console.log(1); main.unregisterReceiver(receiver); // 停止监听广播 // 解绑 uni 全局事件监听器,否则可能会出错 uni.$off('SCAN_CODE'); }; export const queryCode = (code) => { // 防止重复查询 if (_codeQueryTag) return false; _codeQueryTag = true; // 标记为已经查询 setTimeout(function () { _codeQueryTag = false; // 重置标记 }, 150); var id = code; //id 就是扫码的结果 uni.$emit("SCAN_CODE", { code: id }); // 触发 SCAN_CODE 事件,并传递扫描到的内容 };