| | |
| | | <template> |
| | | <view> |
| | | <view class="content"> |
| | | <!-- <text>扫描结果:{{ scanResult }}</text> --> |
| | | </view> |
| | | </view> |
| | | </template> |
| | | |
| | | <script> |
| | | var main, receiver, filter; |
| | | var action, extraKey; |
| | | var _codeQueryTag = false; |
| | | export default { |
| | | data() { |
| | | return { |
| | | scanCode: '' |
| | | } |
| | | }, |
| | | created: function(option) { |
| | | uni.getSystemInfo({ |
| | | success: (res) => { |
| | | var brand = res.brand.toUpperCase(); |
| | | var model = res.model.toUpperCase(); |
| | | if (brand.indexOf("ZEBRA")!=-1 && model.indexOf("TC2")!=-1) { |
| | | action = "com.zebra.scan"; |
| | | extraKey = "com.motorolasolutions.emdk.datawedge.data_string"; |
| | | } else if (brand.indexOf("SEUIC")!=-1||brand.indexOf("AUTOID")!=-1) { |
| | | action = "com.android.server.scannerservice.broadcast"; |
| | | extraKey = "scannerdata"; |
| | | }else{ |
| | | return; |
| | | } |
| | | console.log(action); |
| | | console.log(extraKey); |
| | | this.initScan() |
| | | this.startScan(); |
| | | var main, receiver, filter; |
| | | var action, extraKey; |
| | | var _codeQueryTag = false; |
| | | |
| | | export default { |
| | | data() { |
| | | return { |
| | | scanCode: '', |
| | | scanResult: '' |
| | | } |
| | | }, |
| | | created() { |
| | | uni.getSystemInfo({ |
| | | success: (res) => { |
| | | var brand = res.brand.toUpperCase(); |
| | | var model = res.model.toUpperCase(); |
| | | |
| | | console.log('设备品牌:', brand); |
| | | console.log('设备型号:', model); |
| | | |
| | | // Zebra设备配置 |
| | | if (brand.indexOf("ZEBRA") != -1 && model.indexOf("TC2") != -1) { |
| | | action = "com.zebra.scan"; |
| | | extraKey = "com.motorolasolutions.emdk.datawedge.data_string"; |
| | | } |
| | | }) |
| | | // AUTOID9N设备配置 |
| | | else if (brand.indexOf("SEUIC") != -1 || brand.indexOf("AUTOID") != -1) { |
| | | // AUTOID9N专用配置 |
| | | if (model.indexOf("AUTOID9N") != -1) { |
| | | action = "com.android.server.scannerservice.broadcast"; |
| | | extraKey = "scannerdata"; // 或 "BARCODE_STRING",根据实际情况调整 |
| | | } |
| | | // 其他SEUIC设备 |
| | | else { |
| | | action = "com.android.server.scannerservice.broadcast"; |
| | | extraKey = "scannerdata"; |
| | | } |
| | | } |
| | | else { |
| | | console.log('未知设备品牌,无法初始化扫码'); |
| | | return; |
| | | } |
| | | |
| | | console.log('扫码广播配置:', { action, extraKey }); |
| | | this.initScan(); |
| | | this.startScan(); |
| | | }, |
| | | fail: (err) => { |
| | | console.error('获取系统信息失败:', err); |
| | | } |
| | | }); |
| | | }, |
| | | onLoad() { |
| | | // 监听全局扫码事件 |
| | | uni.$on('scan', (event) => { |
| | | this.scanResult = event.code; |
| | | console.log('扫码结果:', this.scanResult); |
| | | }); |
| | | }, |
| | | onUnload() { |
| | | this.stopScan(); |
| | | uni.$off('scan'); // 移除事件监听 |
| | | }, |
| | | methods: { |
| | | initScan() { |
| | | console.log('初始化扫码接收器'); |
| | | |
| | | |
| | | }, |
| | | onHide: function() { |
| | | this.stopScan(); |
| | | }, |
| | | destroyed: function() { |
| | | this.stopScan(); |
| | | }, |
| | | methods: { |
| | | initScan() { |
| | | console.log('initScan'); |
| | | let _this = this; |
| | | main = plus.android.runtimeMainActivity(); //获取activity |
| | | try { |
| | | main = plus.android.runtimeMainActivity(); // 获取activity |
| | | var IntentFilter = plus.android.importClass('android.content.IntentFilter'); |
| | | filter = new IntentFilter(); |
| | | //下面的addAction内改为自己的广播动作 |
| | | filter.addAction(action); |
| | | |
| | | console.log('注册广播过滤器:', action); |
| | | |
| | | receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', { |
| | | onReceive: function(context, intent) { |
| | | console.log('onReceive'); |
| | | plus.android.importClass(intent); |
| | | //下面的getStringExtra内改为自己的广播标签--有误 |
| | | let code = intent.getStringExtra(extraKey); |
| | | _this.queryCode(code); |
| | | } |
| | | onReceive: function (context, intent) { |
| | | console.log('接收到扫码广播'); |
| | | |
| | | try { |
| | | plus.android.importClass(intent); |
| | | let code = intent.getStringExtra(extraKey); |
| | | |
| | | if (code) { |
| | | console.log('扫码内容:', code); |
| | | this.queryCode(code); |
| | | } else { |
| | | console.warn('扫码内容为空,可能ExtraKey不正确:', extraKey); |
| | | |
| | | // 尝试备选ExtraKey |
| | | const altExtraKey = extraKey === "BARCODE_STRING" ? "scannerdata" : "BARCODE_STRING"; |
| | | code = intent.getStringExtra(altExtraKey); |
| | | |
| | | if (code) { |
| | | console.log('使用备选ExtraKey获取到内容:', altExtraKey); |
| | | this.queryCode(code); |
| | | } |
| | | } |
| | | } catch (e) { |
| | | console.error('处理扫码广播时出错:', e); |
| | | } |
| | | }.bind(this) // 确保this指向组件实例 |
| | | }); |
| | | }, |
| | | startScan() { |
| | | console.log('startScan'); |
| | | main.registerReceiver(receiver, filter); |
| | | }, |
| | | stopScan() { |
| | | console.log('stopScan'); |
| | | main.unregisterReceiver(receiver); |
| | | }, |
| | | queryCode: function(code) { |
| | | console.log('queryCode'); |
| | | if (_codeQueryTag) return false; |
| | | _codeQueryTag = true; |
| | | setTimeout(function() { |
| | | _codeQueryTag = false; |
| | | }, 150); |
| | | var id = code |
| | | uni.$emit('scan', { |
| | | code: id |
| | | }) |
| | | |
| | | console.log('扫码接收器初始化成功'); |
| | | } catch (e) { |
| | | console.error('初始化扫码接收器失败:', e); |
| | | } |
| | | }, |
| | | startScan() { |
| | | console.log('开始监听扫码广播'); |
| | | |
| | | try { |
| | | if (main && receiver && filter) { |
| | | main.registerReceiver(receiver, filter); |
| | | console.log('广播接收器已注册'); |
| | | } else { |
| | | console.error('无法注册广播接收器: 组件未初始化'); |
| | | } |
| | | } catch (e) { |
| | | console.error('注册广播接收器失败:', e); |
| | | } |
| | | }, |
| | | stopScan() { |
| | | console.log('停止监听扫码广播'); |
| | | |
| | | try { |
| | | if (main && receiver) { |
| | | main.unregisterReceiver(receiver); |
| | | console.log('广播接收器已注销'); |
| | | } |
| | | } catch (e) { |
| | | console.error('注销广播接收器失败:', e); |
| | | } |
| | | }, |
| | | queryCode(code) { |
| | | console.log('处理扫码结果:', code); |
| | | |
| | | if (_codeQueryTag) { |
| | | console.log('忽略重复扫码'); |
| | | return false; |
| | | } |
| | | |
| | | _codeQueryTag = true; |
| | | |
| | | // 防抖处理 |
| | | setTimeout(() => { |
| | | _codeQueryTag = false; |
| | | }, 150); |
| | | |
| | | // 触发全局事件 |
| | | uni.$emit('scan', { code }); |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style> |
| | | |
| | | </style> |
| | | <style></style> |