diff --git a/manifest.json b/manifest.json index 2435780..a944aa7 100644 --- a/manifest.json +++ b/manifest.json @@ -2,7 +2,7 @@ "name" : "星汉物联", "appid" : "__UNI__A21EF43", "description" : "设备管控", - "versionName" : "1.0.28", + "versionName" : "1.0.29", "versionCode" : "100", "transformPx" : false, /* 5+App特有相关 */ @@ -66,7 +66,8 @@ "NSLocationAlwaysUsageDescription" : "App需要您的同意,才能始终访问位置", "NSLocationAlwaysAndWhenInUseUsageDescription" : "App需要您的同意,才能始终访问位置" }, - "dSYMs" : false + "dSYMs" : false, + "idfa" : false }, /* SDK配置 */ "sdkConfigs" : { @@ -79,15 +80,16 @@ } }, "maps" : { + "customStyle" : true, "amap" : { "name" : "amapHG8nIFW5", "appkey_ios" : "065c43f02c7b627a74ad7dd23b16bb4f", "appkey_android" : "d7d852dbda2b95f6f796fb9a711a9fee" - }, - "customStyle" : true + } }, "oauth" : {}, - "push" : {} + "push" : {}, + "speech" : {} }, "splashscreen" : { "useOriginalMsgbox" : true, @@ -156,5 +158,6 @@ "enable" : false }, "vueVersion" : "2", - "locale" : "auto" + "locale" : "zh-Hans", + "fallbackLocale" : "zh-Hans" } diff --git a/pages/6155/deviceDetail.vue b/pages/6155/deviceDetail.vue index 83c41cf..c333c54 100644 --- a/pages/6155/deviceDetail.vue +++ b/pages/6155/deviceDetail.vue @@ -124,7 +124,7 @@ :borderColor="Status.Pop.borderColor" :textColor="Status.Pop.textColor" :buttonBgColor="Status.Pop.buttonBgColor" :buttonTextColor="Status.Pop.buttonTextColor" :iconUrl="Status.Pop.iconUrl" :message="Status.Pop.message" :buttonText="Status.Pop.buttonText" - @buttonClick="HidePop" :visiblePrompt="Status.Pop.visiblePrompt" :promptTitle="Status.Pop.promptTitle" + @buttonClick="HidePop" @closePop="closePop" :visiblePrompt="Status.Pop.visiblePrompt" :promptTitle="Status.Pop.promptTitle" v-model="Status.Pop.modelValue" /> @@ -538,7 +538,7 @@ buttonBgColor: "#E03434", buttonText: '去连接', okCallback: function() { - console.log("1111"); + // console.log("1111"); uni.navigateTo({ url: "/pages/common/addBLE/addEquip", events: { @@ -974,8 +974,15 @@ }) }, + closePop: function() { + this.Status.Pop.showPop = false; + + if (this.Status.Pop.cancelCallback) { + this.Status.Pop.cancelCallback(); + } + }, HidePop: function() { - console.log("1111"); + // console.log("1111"); if (this.Status.Pop.clickEvt == 'SendUsr') { } diff --git a/pages/650/HBY650.vue b/pages/650/HBY650.vue index 6ee93dd..a511dd7 100644 --- a/pages/650/HBY650.vue +++ b/pages/650/HBY650.vue @@ -146,7 +146,7 @@ :buttonBgColor="Status.Pop.buttonBgColor" :buttonTextColor="Status.Pop.buttonTextColor" :iconUrl="Status.Pop.iconUrl" :message="Status.Pop.message" :buttonText="Status.Pop.buttonText" @buttonClick="HidePop" :visiblePrompt="Status.Pop.visiblePrompt" :promptTitle="Status.Pop.promptTitle" - v-model="Status.Pop.modelValue" /> + v-model="Status.Pop.modelValue" @closePop="closePop" /> { if (v.macAddress == device.deviceMac) { console.log("找到设备了", v); @@ -462,9 +465,9 @@ getDetail() { var that = this; usrApi.getDetail(this.device.id).then(res => { - + if (res && res.code == 200) { - res = res.data; + res = res.data; let personnelInfo = res.personnelInfo; if (personnelInfo) { that.formData.company = personnelInfo.unitName; @@ -475,7 +478,7 @@ } }); }, - + setBleFormData() { ble.data.LinkedList.find((v) => { if (v.deviceId == these.formData.deviceId) { @@ -579,34 +582,36 @@ }, - showBleUnConnect(){ - - this.showPop({ - message: "蓝牙未连接过该设备,请使用蓝牙重新添加该设备", - iconUrl: "/static/images/6155/DeviceDetail/uploadErr.png", - borderColor: "#e034344d", - buttonBgColor: "#E03434", - buttonText:'去连接', - okCallback:function(){ - console.log("1111"); - uni.navigateTo({ - url:"/pages/common/addBLE/addEquip", - events: { - BindOver: function(data) { - console.log(data) - } - }, - success: function(res) { - // 通过eventChannel向被打开页面传送数据 - res.eventChannel.emit('detailData', { data: these.device }) - }, - fail(ex){ - console.log("跳转失败",ex); - } - }) + showBleUnConnect() { + + this.showPop({ + message: "蓝牙未连接过该设备,请使用蓝牙重新添加该设备", + iconUrl: "/static/images/6155/DeviceDetail/uploadErr.png", + borderColor: "#e034344d", + buttonBgColor: "#E03434", + buttonText: '去连接', + okCallback: function() { + console.log("1111"); + uni.navigateTo({ + url: "/pages/common/addBLE/addEquip", + events: { + BindOver: function(data) { + console.log(data) } - }); - }, + }, + success: function(res) { + // 通过eventChannel向被打开页面传送数据 + res.eventChannel.emit('detailData', { + data: these.device + }) + }, + fail(ex) { + console.log("跳转失败", ex); + } + }) + } + }); + }, LampToggle: function() { this.formData.cMode = !this.formData.cMode; @@ -1141,6 +1146,13 @@ this.Status.BottomMenu.activeIndex = index; }, + closePop: function() { + this.Status.Pop.showPop = false; + + if (this.Status.Pop.cancelCallback) { + this.Status.Pop.cancelCallback(); + } + }, HidePop: function() { if (this.Status.Pop.clickEvt == 'SendUsr') { @@ -1148,7 +1160,7 @@ console.log("1111"); this.Status.Pop.showPop = false; - if(this.Status.Pop.okCallback){ + if (this.Status.Pop.okCallback) { this.Status.Pop.okCallback(); } }, @@ -1232,10 +1244,10 @@ visibleClose: true }); these.setBleFormData(); - - + + let json = { - deviceId: these.device.id, + deviceId: these.device.id, name: these.formData.company, position: these.formData.name, unitName: these.formData.job, diff --git a/pages/670/HBY670.vue b/pages/670/HBY670.vue index 97f8567..a8e98ff 100644 --- a/pages/670/HBY670.vue +++ b/pages/670/HBY670.vue @@ -247,7 +247,8 @@ :buttonBgColor="Status.Pop.buttonBgColor" :buttonTextColor="Status.Pop.buttonTextColor" :iconUrl="Status.Pop.iconUrl" :message="Status.Pop.message" :buttonText="Status.Pop.buttonText" @buttonClick="HidePop" @closePop="closePop" @cancelPop="closePop" :visiblePrompt="Status.Pop.visiblePrompt" - :promptTitle="Status.Pop.promptTitle" v-model="Status.Pop.modelValue" /> + :promptTitle="Status.Pop.promptTitle" v-model="Status.Pop.modelValue" :showCancel="Status.Pop.showCancel" + :buttonCancelText="Status.Pop.buttonCancelText" /> { + this.closePop(); + }, + okCallback: function() { + console.log("1111"); + uni.navigateTo({ + url: "/pages/common/addBLE/addEquip", + events: { + BindOver: function(data) { + console.log(data) + } + }, + success: function(res) { + // 通过eventChannel向被打开页面传送数据 + res.eventChannel.emit('detailData', { + data: these.device + }) + }, + fail(ex) { + console.log("跳转失败", ex); + } + }) + } + }); + }, gotoMap() { this.detailData.longitude = this.formData.Lon; this.detailData.latitude = this.formData.Lat; @@ -545,12 +585,16 @@ that.formData.address = res.address; let personnelInfo = res.personnelInfo; if (personnelInfo) { - that.formData.company = personnelInfo.unitName; - that.formData.usrname = personnelInfo.name; + that.formData.company = personnelInfo.name; + that.formData.usrname = personnelInfo.unitName; that.formData.job = personnelInfo.position; that.formData.usrid = personnelInfo.code } - + that.formData.imei=res.deviceImei; + these.device.deviceImei=res.deviceImei; + if(that.formData.imei){ + that.initMQ(); + } let dic = { "3": "hight", "2": "center", @@ -670,7 +714,7 @@ return new Promise((resolve, reject) => { if (mqttClient) { - console.log("无需再次初始化") + // console.log("无需再次初始化") resolve(); return; } @@ -735,7 +779,10 @@ qos: 1 }); if (flag) { - resolve(); + resolve({ + code: 200, + msg: 'MQTT直连发送成功' + }); return; } console.log("MQTT未连接,无法发布消息") @@ -994,6 +1041,7 @@ }); } else { requestSend(); + these.showBleUnConnect(); } } @@ -1062,7 +1110,7 @@ } else { requestCloseSOS(); - + these.showBleUnConnect(); } } @@ -1138,13 +1186,31 @@ ins_SOSGrade: [dic.mqtt[type]] }; - let requestSend = () => { - this.sendMQ(json).then((res) => { - console.log("4g发送成功"); - json.deviceId = these.device.id; - json.deviceImei = these.device.deviceImei; - api.sendSos(json); + let message = { + instructValue: json.ins_SOSGrade[0] + }; + + message.deviceId = these.device.id; + message.deviceImei = these.device.deviceImei; + + let requestSend = () => { + + message.isBluetooth = false; + api.sendSos(message).then((res) => { + console.log("res=>", res); + if (res && res.code == 200) { + console.log("接口发送SOS指令成功"); + return Promise.resolve({ + code: 200, + msg: '操作成功' + }); + } else { + return this.sendMQ(json); + } + + }).then((res) => { + console.log("res=", res); }).catch((ex) => { console.log("ex=", ex); these.showPop({ @@ -1179,17 +1245,19 @@ ble.sendData(f.deviceId, buffer, f.writeServiceId, f.wirteCharactId, 10).then( () => { console.log("蓝牙发送成功了"); - - hideLoading(these); these.setBleFormData(); + message.isBluetooth = true; + api.sendSos(message); }).catch((ex) => { //使用4G发送 console.log("蓝牙发送失败,转4g发送", ex); requestSend(); }); } else { + console.log("找不到蓝牙设备"); requestSend(); + these.showBleUnConnect(); } } @@ -1367,6 +1435,7 @@ } else { console.log("找不到蓝牙设备,使用4G发送") requestSend(); + these.showBleUnConnect(); } } @@ -1745,37 +1814,9 @@ var sendVideo = (videoPath) => { - let f = these.getDevice(); + if (!f) { - these.showPop({ - message: "蓝牙未连接,请连接后再试", - iconUrl: "/static/images/6155/DeviceDetail/uploadErr.png", - borderColor: "#e034344d", - buttonBgColor: "#E03434", - buttonText: '去连接', - okCallback: function() { - console.log("1111"); - uni.navigateTo({ - url: "/pages/common/addBLE/addEquip", - events: { - BindOver: function(data) { - console.log(data) - } - }, - success: function(res) { - // 通过eventChannel向被打开页面传送数据 - res.eventChannel.emit('detailData', { - data: these.device - }) - }, - fail(ex) { - console.log("跳转失败", ex); - } - }) - } - }); - - + these.showBleUnConnect(); return; } let uploadVideo = () => { @@ -2014,6 +2055,8 @@ cancelCallback: null, popType: 'custom', buttonText: '确定', + showCancel: false, + buttonCancelText: '取消', clickEvt: '' }; if (!option) { @@ -2102,6 +2145,7 @@ if (!f) { //走4G通道 requestSend(); + these.showBleUnConnect(); return; } showLoading(this, { diff --git a/pages/7305/BJQ7305.vue b/pages/7305/BJQ7305.vue index 53ff44e..c91f7de 100644 --- a/pages/7305/BJQ7305.vue +++ b/pages/7305/BJQ7305.vue @@ -124,7 +124,7 @@ :borderColor="Status.Pop.borderColor" :textColor="Status.Pop.textColor" :buttonBgColor="Status.Pop.buttonBgColor" :buttonTextColor="Status.Pop.buttonTextColor" :iconUrl="Status.Pop.iconUrl" :message="Status.Pop.message" :buttonText="Status.Pop.buttonText" - @buttonClick="HidePop" :visiblePrompt="Status.Pop.visiblePrompt" :promptTitle="Status.Pop.promptTitle" + @buttonClick="HidePop" @closePop="closePop" :visiblePrompt="Status.Pop.visiblePrompt" :promptTitle="Status.Pop.promptTitle" v-model="Status.Pop.modelValue" /> @@ -972,6 +972,13 @@ }) }, + closePop: function() { + this.Status.Pop.showPop = false; + + if (this.Status.Pop.cancelCallback) { + this.Status.Pop.cancelCallback(); + } + }, HidePop: function() { console.log("1111"); if (this.Status.Pop.clickEvt == 'SendUsr') { diff --git a/pages/common/addBLE/addEquip.vue b/pages/common/addBLE/addEquip.vue index 51867c2..737c9e6 100644 --- a/pages/common/addBLE/addEquip.vue +++ b/pages/common/addBLE/addEquip.vue @@ -102,6 +102,8 @@ data() { return { Status: { + intval: null, + time: null, BottomMenu: { show: false, showHeader: false, @@ -152,7 +154,7 @@ these = this; this.EquipMents = []; ble = bleTool.getBleTool(); - + ble.addDeviceFound((arr) => { arr = arr.devices; @@ -173,11 +175,15 @@ } } - // console.log("equip=", these.EquipMents) + // console.log("equip=", these.EquipMents) }, pagePath); // console.log("addEquip") ble.addReceiveCallback((receivData, f, path, arr) => { if (f.macAddress && these.device) { + clearInterval(this.Status.intval); + this.Status.intval = null; + this.Status.time = null; + showLoading(these, { text: '正在验证设备' }); @@ -202,10 +208,10 @@ // this.EquipMents = []; this.PairEquip = []; - ble && ble.StartSearch().then(res=>{ - console.log("开始搜索成功",res); + ble && ble.StartSearch().then(res => { + console.log("开始搜索成功", res); }).catch((ex) => { - console.log("开始搜索出现异常",ex); + console.log("开始搜索出现异常", ex); if (ex.code == 10001) { these.showOpenSetting(); } @@ -244,6 +250,8 @@ ble.showBlueSetting(false); }, DeviceVerdict(deviceId) { //判断是否是目标设备 + console.log("deviceid=", deviceId); + console.log("these.device=", these.device) if (these.device) { //从设备详情过来的,回设备详情去 let f = ble.data.LinkedList.find(v => { if (v.deviceId == deviceId) { @@ -252,15 +260,32 @@ } return false; }); + let removeLink=()=>{ + ble.subScribe(deviceId,false);//取消订阅消息 + ble.DropDevice(deviceId);//从缓存中删除该设备 + ble.disconnectDevice(deviceId);//断开与该设备的连接 + + let index=this.PairEquip.findIndex(function(v) { + return v.deviceId == deviceId; + }); + if(index>-1){ + this.PairEquip.splice(index,1); + } + } + + console.log("f=", f); if (f.macAddress) { if (f.macAddress != these.device.deviceMac) { - ble.disconnectDevice(deviceId); + removeLink(); updateLoading(these, { text: "设备Mac地址错误,请重选设备连接" - }) - + }); + + setTimeout(() => { + hideLoading(these); + }, 1000) return; } @@ -270,9 +295,44 @@ uni.navigateBack(); return true; } else { - updateLoading(these, { - text: "等待设备上报Mac地址" - }) + this.Status.time = 30; + + + + this.Status.intval = null; + + this.Status.intval = setInterval(() => { + this.Status.time = this.Status.time-1; + if (this.Status.time < 0) { + + clearInterval(this.Status.intval) + this.Status.intval = null; + this.Status.time = null; + f = ble.data.LinkedList.find(v => { + if (v.deviceId == deviceId) { + v.device = these.device; + return true; + } + return false; + }); + if(!f.macAddress){ + removeLink(); + updateLoading(these, { + text: "出现错误,未收到设备Mac地址" + }); + + setTimeout(()=>{ + hideLoading(these) + },1000); + } + return; + } + updateLoading(these, { + + text: "等待设备上报Mac地址," + these.Status.time + 's' + }); + + }, 1000); return undefined; } } diff --git a/pages/common/map/index.vue b/pages/common/map/index.vue index f2c2265..5a771aa 100644 --- a/pages/common/map/index.vue +++ b/pages/common/map/index.vue @@ -83,7 +83,7 @@ export default { id: marker.deviceImei, // 适配deviceId字段 latitude: lat, longitude: lng, - iconPath: marker.devicePic || '/static/images/common/device.png', + iconPath: marker.devicePic || '/static/images/common/mapLocation.png', width: 40, height: 40, anchor: {x: 0.5, y: 0.5}, // 锚点在中心 diff --git a/static/images/common/mapLocation.png b/static/images/common/mapLocation.png new file mode 100644 index 0000000..0a3fd9c Binary files /dev/null and b/static/images/common/mapLocation.png differ diff --git a/utils/BleHelper.js b/utils/BleHelper.js index 323e2aa..81de1ed 100644 --- a/utils/BleHelper.js +++ b/utils/BleHelper.js @@ -1,7 +1,7 @@ import receivTool from "@/utils/BleReceive.js" var recei = null; const serviceDic = [ //合作供应商的蓝牙主服务 -{ + { "serviceId": "0000FFE0-0000-1000-8000-00805F9B34FB", "writeId": "0000FFE1-0000-1000-8000-00805F9B34FB", "notifyId": "0000FFE2-0000-1000-8000-00805F9B34FB" @@ -11,7 +11,7 @@ const serviceDic = [ //合作供应商的蓝牙主服务 "writeId": "0000AE03-0000-1000-8000-00805F9B34FB", "notifyId": "0000AE02-0000-1000-8000-00805F9B34FB" } - + ]; class BleHelper { @@ -33,17 +33,19 @@ class BleHelper { } if (linkedDevices && linkedDevices.length && linkedDevices.length > 0) { console.log("111111", linkedDevices); - linkedDevices.filter((v) => { + linkedDevices=linkedDevices.filter((v) => { v.Linked = false; v.notifyState = false; + + return v.device && v.device.id; }); } setTimeout(() => { - this.OpenBlue().then(()=>{ + this.OpenBlue().then(() => { this.linkAllDevices(); }); - + }, 10); this.data = { isOpenBlue: false, //蓝牙模块是否开启 @@ -120,7 +122,7 @@ class BleHelper { ] } } - + //从缓存中删除某个设备,bleId蓝牙id,deviceId数据库中的设备id DropDevice(bleId, deviceId) { let flag = false; for (var i = 0; i < this.data.LinkedList.length; i++) { @@ -146,6 +148,7 @@ class BleHelper { } + //更新缓存 updateCache() { // console.log("this.StorageKey=", this.StorageKey) uni.setStorageSync(this.StorageKey, this.data.LinkedList); @@ -155,17 +158,23 @@ class BleHelper { // console.log("模块启动时,自动连接已连接过的设备", this.data.LinkedList); if (this.data.LinkedList && this.data.LinkedList.length > 0) { + let flag=false; for (var i = 0; i < this.data.LinkedList.length; i++) { let device = this.data.LinkedList[i]; // console.log("自动连接绑定过的设备:" + device.deviceId); if (device.macAddress && device.device && device.device.id) { this.LinkBlue(device.deviceId, device.writeServiceId, device.wirteCharactId, device .notifyCharactId); + flag=true; } } + if(!flag){ + this.updateCache(); + } } else { - // console.log("无设备连接"); + console.log("蓝牙未连接过任何设备"); + this.updateCache(); } } @@ -387,7 +396,7 @@ class BleHelper { } uni.getBluetoothAdapterState({ success: (info) => { - console.log("蓝牙状态获取成功,",info) + console.log("蓝牙状态获取成功,", info) this.data.available = info.available; this.data.discovering = info.discovering; resolve(info); @@ -461,8 +470,8 @@ class BleHelper { if (!res.connected) { - console.log("蓝牙连接已断开", res); - let f=this.data.LinkedList.find((v) => { + console.error("蓝牙适配器已不可用", res); + let f = this.data.LinkedList.find((v) => { if (v.deviceId == res.deviceId) { v.Linked = false; v.notifyState = false; @@ -471,15 +480,19 @@ class BleHelper { return false; }); this.updateCache(); - console.log("尝试5次恢复连接"); - this.LinkBlue(res.deviceId,f.writeServiceId,f.wirteCharactId,f.notifyCharactId,5) + if (f.device && f.device.id) { + console.log("尝试5次恢复连接,", f.deviceId); + this.LinkBlue(res.deviceId, f.writeServiceId, f + .wirteCharactId, f.notifyCharactId, 5) + } + } else { - console.log("蓝牙连接已恢复,", res); + console.log("蓝牙适配器已恢复,", res); } }); uni.onBluetoothDeviceFound((devices) => { - console.log("发现新设备:" + JSON.stringify(devices)); + // console.log("发现新设备:" + JSON.stringify(devices)); this.data.searchList = this.data.searchList.concat( devices); if (this.cfg.onDeviceFound) { @@ -539,20 +552,20 @@ class BleHelper { }); this.updateCache(); } - + if (str.indexOf('imei:') == 0) { let imei = str.split(':')[1]; - - + + this.data.LinkedList.find((v) => { if (v.deviceId == receive .deviceId) { - v.imei=imei; + v.imei = imei; } }); this.updateCache(); - - } + + } if (bytes[0] == 0xFC) { //6155以0xFC开头代表mac地址 console.log("收到mac地址:", bytes) @@ -572,7 +585,7 @@ class BleHelper { } console.log("str=", str); } catch (ex) { - console.log("将数据转文本失败", ex); + console.error("将数据转文本失败", ex); } let recData = { deviceId: receive.deviceId, @@ -589,31 +602,32 @@ class BleHelper { if (this.cfg.receivDataCallback.length > 0) { let path = this.getCurrentPagePath(); - console.log("有人订阅消息") + // console.log("有人订阅消息") this.cfg.receivDataCallback.forEach(( rec) => { - console.log("有人订阅消息111", ) + // console.log("有人订阅消息111", ) if (rec.callback) { try { rec.callback(recData, f, path, this.cfg .receivDataCallback - ); + ); } catch (err) { - console.log("订阅消息出现异常", + console.error( + "订阅消息出现异常", err); } } }) } else { - console.log("无人订阅消息"); + // console.log("无人订阅消息"); } } else { - console.log("无人订阅receivDataCallback,不处理数据"); + // console.log("无人订阅receivDataCallback,不处理数据"); } } catch (ex) { - console.log("ex=", ex); + console.error("处理订阅消息失败,ex=", ex); } }); @@ -638,7 +652,7 @@ class BleHelper { console.log("res=", res) return init(); }).then(resolve).catch((ex) => { - console.log("22222"); + console.error("异常:", ex); reject(ex); }); @@ -690,7 +704,7 @@ class BleHelper { let RunSearch = (serviceId) => { return new Promise((resolve, reject) => { uni.startBluetoothDevicesDiscovery({ - services:serviceId? [serviceId]:[], + services: serviceId ? [serviceId] : [], allowDuplicatesKey: true, success: (res) => { //console.log('开始搜索蓝牙设备成功'); @@ -713,9 +727,9 @@ class BleHelper { // for (let i = 0; i < serviceIds.length; i++) { // promises.push(RunSearch(serviceIds[i])); - + // } - promises.push(RunSearch()); + promises.push(RunSearch()); Promise.all(promises).then(resolve).catch(reject); }); @@ -778,14 +792,29 @@ class BleHelper { //订阅消息 subScribe(deviceId, state) { - console.log("开始订阅消息"); + console.log("开始订阅消息", state); return new Promise((resolve, reject) => { setTimeout(() => { - + let c = this.data.LinkedList.find((v) => { return v.deviceId == deviceId; }); - + if (!deviceId) { + console.error('deviceId无效') + reject({ + code: 404, + msg: 'deviceId无效' + }); + return; + } + if (!c) { + console.error("已找不到该设备"); + reject({ + code: 404, + msg: '已找不到该设备' + }); + return; + } if (state) { if (c.notifyState) { resolve(); @@ -794,8 +823,8 @@ class BleHelper { } let startSubScribe = (id, serviceId, characteristicId) => { - console.log("serviceId=", serviceId); - console.log("characteristicId=", characteristicId); + // console.log("serviceId=", serviceId); + // console.log("characteristicId=", characteristicId); let p1 = new Promise((succ, err) => { uni.notifyBLECharacteristicValueChange({ @@ -836,6 +865,7 @@ class BleHelper { }); return new Promise((succ, err) => { Promise.race([p1, p2]).then(succ).catch(ex => { + // console.error("异常了:",ex); if (ex.code == -1) { succ(); return; @@ -845,8 +875,16 @@ class BleHelper { }); } + + let serv = serviceDic.find(v => { + return v.serviceId == c.writeServiceId; + }); let promies = new Array(); - if (c.Characteristics && c.Characteristics.length) { + if (c.notifyServiceid && c.notifyCharactId) { + promies.push(startSubScribe(c.deviceId, c.notifyServiceid, c.notifyCharactId)); + } else if (serv) { + promies.push(startSubScribe(c.deviceId, serv.serviceId, serv.notifyId)); + } else if (c.Characteristics && c.Characteristics.length) { for (var i = 0; i < c.Characteristics.length; i++) { let item = c.Characteristics[i]; let serviceId = item.serviceId; @@ -854,36 +892,42 @@ class BleHelper { if (item.properties.notify) { promies.push(startSubScribe(deviceId, serviceId, characteristicId)); - + } } - }else{ - promies.push(startSubScribe(c.deviceId, c.notifyServiceid, c.notifyCharactId)); + } else { + console.log("c=", c); + console.log("serv=", serv); + reject({ + code: 403, + msg: "出现错误,找不到任何通知特征" + }); + return; } if (promies.length > 0) { - + Promise.allSettled(promies).then((results) => { - + results.forEach((result, index) => { if (result.status === "fulfilled") { - // console.log(`操作${index + 1}成功:`, result.value); + // console.log(`操作${index + 1}成功:`, result.value); } else { - // console.log(`操作${index + 1}失败:`, result.reason - // .message); + // console.log(`操作${index + 1}失败:`, result.reason + // .message); } }); // console.log("订阅消息成功"); resolve(); }).catch((ex) => { - console.log("ex=",ex); + console.error("异常,ex=", ex); reject(ex); }).finally(() => { // console.log("finally") }); } else { - console.log("没有特征需要订阅"); + console.log("没有特征需要订阅"); resolve(); } @@ -933,7 +977,7 @@ class BleHelper { }); if (se) { - console.log("合作供应商的",s) + console.log("合作供应商的", s) this.data.LinkedList.find((v) => { if (v.deviceId == id) { v.writeServiceId = s.serviceId; @@ -983,11 +1027,11 @@ class BleHelper { .then((res) => { console.log('设备连接成功,初始化完成', this.data .LinkedList); - + resolve(); }) .catch(error => { - console.log("errrr", error); + console.error("errrr=", error); reject(error); }); } @@ -1200,7 +1244,7 @@ class BleHelper { deviceId: deviceId, mtu: 512, success: (mtu) => { - + resolve(true); }, fail: () => { @@ -1288,7 +1332,7 @@ class BleHelper { resolve(); }, 500); }).catch((ex) => { - console.log("出现异常", ex); + console.error("出现异常", ex); reject(ex); }); }); @@ -1429,7 +1473,7 @@ class BleHelper { } Promise.race([timeOut(ms), promise]).then(resolve).catch((ex) => { - // console.log("ex=", ex); + // console.error("ex=", ex); if (ex.code == -1) { resolve(ex); } else { @@ -1469,7 +1513,7 @@ class BleHelper { //console.log("发送成功") resolve(); }).catch((ex) => { - //console.log("出现异常", ex); + console.error("出现异常", ex); reject(this.getError(ex)); }); }); diff --git a/utils/BleReceive.js b/utils/BleReceive.js index 421886f..8364126 100644 --- a/utils/BleReceive.js +++ b/utils/BleReceive.js @@ -22,6 +22,9 @@ class BleReceive { setBleFormData(data,f) { if(data){ let linkedList=uni.getStorageSync(this.StorageKey); + if(!linkedList){ + return; + } linkedList.find((v)=>{ if(f.deviceId==v.deviceId){ let keys=Object.keys(data);