|  |  |  |  | class Bluetooth { | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	constructor() { | 
					
						
							|  |  |  |  | 		this.isOpenBle = false; | 
					
						
							|  |  |  |  | 		this.deviceId = ""; | 
					
						
							|  |  |  |  | 		this.serviceId = ""; | 
					
						
							|  |  |  |  | 		this.writeId = ""; | 
					
						
							|  |  |  |  | 		this.notifyId = ""; | 
					
						
							|  |  |  |  | 		this.openBluetoothAdapter(); | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	showToast(title) { | 
					
						
							|  |  |  |  | 		uni.showToast({ | 
					
						
							|  |  |  |  | 			title: title, | 
					
						
							|  |  |  |  | 			icon: 'none', | 
					
						
							|  |  |  |  | 			'duration': 2000 | 
					
						
							|  |  |  |  | 		}); | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	openBluetoothAdapter() { | 
					
						
							|  |  |  |  | 		return new Promise((resolve, reject) => { | 
					
						
							|  |  |  |  | 			uni.openBluetoothAdapter({ | 
					
						
							|  |  |  |  | 				success: res => { | 
					
						
							|  |  |  |  | 					this.isOpenBle = true; | 
					
						
							|  |  |  |  | 					this.showToast("初始化蓝牙模块成功"); | 
					
						
							|  |  |  |  | 					resolve(res); | 
					
						
							|  |  |  |  | 				}, | 
					
						
							|  |  |  |  | 				fail: err => { | 
					
						
							|  |  |  |  | 					this.showToast(`初始化蓝牙模块失败` + JSON.stringify(err)); | 
					
						
							|  |  |  |  | 					reject(err); | 
					
						
							|  |  |  |  | 				}, | 
					
						
							|  |  |  |  | 			}); | 
					
						
							|  |  |  |  | 		}); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	startBluetoothDevicesDiscovery() { | 
					
						
							|  |  |  |  | 		if (!this.isOpenBle) { | 
					
						
							|  |  |  |  | 			this.showToast(`初始化蓝牙模块失败`) | 
					
						
							|  |  |  |  | 			return; | 
					
						
							|  |  |  |  | 		} | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 		let self = this; | 
					
						
							|  |  |  |  | 		uni.showLoading({ | 
					
						
							|  |  |  |  | 			title: '蓝牙搜索中' | 
					
						
							|  |  |  |  | 		}) | 
					
						
							|  |  |  |  | 		return new Promise((resolve, reject) => { | 
					
						
							|  |  |  |  | 			setTimeout(() => { | 
					
						
							|  |  |  |  | 				uni.startBluetoothDevicesDiscovery({ | 
					
						
							|  |  |  |  | 					success: res => { | 
					
						
							|  |  |  |  | 						resolve(res) | 
					
						
							|  |  |  |  | 					}, | 
					
						
							|  |  |  |  | 					fail: res => { | 
					
						
							|  |  |  |  | 						self.showToast(`搜索设备失败` + JSON.stringify(err)); | 
					
						
							|  |  |  |  | 						reject(err); | 
					
						
							|  |  |  |  | 					} | 
					
						
							|  |  |  |  | 				}) | 
					
						
							|  |  |  |  | 			}, 300); | 
					
						
							|  |  |  |  | 		}); | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	stopBluetoothDevicesDiscovery() { | 
					
						
							|  |  |  |  | 		let self = this; | 
					
						
							|  |  |  |  | 		return new Promise((resolve, reject) => { | 
					
						
							|  |  |  |  | 			uni.stopBluetoothDevicesDiscovery({ | 
					
						
							|  |  |  |  | 				success: e => { | 
					
						
							|  |  |  |  | 					uni.hideLoading(); | 
					
						
							|  |  |  |  | 				}, | 
					
						
							|  |  |  |  | 				fail: e => { | 
					
						
							|  |  |  |  | 					uni.hideLoading(); | 
					
						
							|  |  |  |  | 					self.showToast(`停止搜索蓝牙设备失败` + JSON.stringify(err)); | 
					
						
							|  |  |  |  | 				} | 
					
						
							|  |  |  |  | 			}) | 
					
						
							|  |  |  |  | 		}); | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	createBLEConnection() { | 
					
						
							|  |  |  |  | 		//设备deviceId
 | 
					
						
							|  |  |  |  | 		let deviceId = this.deviceId; | 
					
						
							|  |  |  |  | 		let self = this; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 		uni.showLoading({ | 
					
						
							|  |  |  |  | 			mask: true, | 
					
						
							|  |  |  |  | 			title: '设别连接中,请稍候...' | 
					
						
							|  |  |  |  | 		}) | 
					
						
							|  |  |  |  | 		console.log(this.deviceId); | 
					
						
							|  |  |  |  | 		return new Promise((resolve, reject) => { | 
					
						
							|  |  |  |  | 			uni.createBLEConnection({ | 
					
						
							|  |  |  |  | 				deviceId, | 
					
						
							|  |  |  |  | 				success: (res) => { | 
					
						
							|  |  |  |  | 					console.log("res:createBLEConnection " + JSON.stringify(res)); | 
					
						
							|  |  |  |  | 					resolve(res) | 
					
						
							|  |  |  |  | 				}, | 
					
						
							|  |  |  |  | 				fail: err => { | 
					
						
							|  |  |  |  | 					uni.hideLoading(); | 
					
						
							|  |  |  |  | 					self.showToast(`停止搜索蓝牙设备失败` + JSON.stringify(err)); | 
					
						
							|  |  |  |  | 					reject(err); | 
					
						
							|  |  |  |  | 				} | 
					
						
							|  |  |  |  | 			}) | 
					
						
							|  |  |  |  | 		}); | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	//获取蓝牙设备所有服务(service)
 | 
					
						
							|  |  |  |  | 	getBLEDeviceServices() { | 
					
						
							|  |  |  |  | 		let _serviceList = []; | 
					
						
							|  |  |  |  | 		let deviceId = this.deviceId; | 
					
						
							|  |  |  |  | 		let self = this; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 		return new Promise((resolve, reject) => { | 
					
						
							|  |  |  |  | 			setTimeout(() => { | 
					
						
							|  |  |  |  | 				uni.getBLEDeviceServices({ | 
					
						
							|  |  |  |  | 					deviceId, | 
					
						
							|  |  |  |  | 					success: res => { | 
					
						
							|  |  |  |  | 						for (let service of res.services) { | 
					
						
							|  |  |  |  | 							if (service.isPrimary) { | 
					
						
							|  |  |  |  | 								_serviceList.push(service); | 
					
						
							|  |  |  |  | 							} | 
					
						
							|  |  |  |  | 						} | 
					
						
							|  |  |  |  | 						uni.hideLoading(); | 
					
						
							|  |  |  |  | 						console.log("_serviceList: " + JSON.stringify(_serviceList)); | 
					
						
							|  |  |  |  | 						resolve(_serviceList) | 
					
						
							|  |  |  |  | 					}, | 
					
						
							|  |  |  |  | 					fail: err => { | 
					
						
							|  |  |  |  | 						uni.hideLoading(); | 
					
						
							|  |  |  |  | 						self.showToast(`获取设备Services` + JSON.stringify(err)); | 
					
						
							|  |  |  |  | 						reject(err); | 
					
						
							|  |  |  |  | 					}, | 
					
						
							|  |  |  |  | 				}) | 
					
						
							|  |  |  |  | 			}, 500); | 
					
						
							|  |  |  |  | 		}); | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	//获取蓝牙设备某个服务中所有特征值(characteristic)
 | 
					
						
							|  |  |  |  | 	getBLEDeviceCharacteristics() { | 
					
						
							|  |  |  |  | 		let deviceId = this.deviceId; | 
					
						
							|  |  |  |  | 		let serviceId = this.serviceId; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 		let self = this; | 
					
						
							|  |  |  |  | 		return new Promise((resolve, reject) => { | 
					
						
							|  |  |  |  | 			uni.getBLEDeviceCharacteristics({ | 
					
						
							|  |  |  |  | 				deviceId, | 
					
						
							|  |  |  |  | 				serviceId, | 
					
						
							|  |  |  |  | 				success: res => { | 
					
						
							|  |  |  |  | 					for (let _obj of res.characteristics) { | 
					
						
							|  |  |  |  | 						//获取notify
 | 
					
						
							|  |  |  |  | 						if (_obj.properties.notify) { | 
					
						
							|  |  |  |  | 							self.notifyId = _obj.uuid; | 
					
						
							|  |  |  |  | 							uni.setStorageSync('notifyId', self.notifyId); | 
					
						
							|  |  |  |  | 						} | 
					
						
							|  |  |  |  | 						//获取writeId
 | 
					
						
							|  |  |  |  | 						if (_obj.properties.write) { | 
					
						
							|  |  |  |  | 							self.writeId = _obj.uuid; | 
					
						
							|  |  |  |  | 							uni.setStorageSync('writeId', self.writeId); | 
					
						
							|  |  |  |  | 						} | 
					
						
							|  |  |  |  | 					} | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 					//console.log("res:getBLEDeviceCharacteristics " + JSON.stringify(res));
 | 
					
						
							|  |  |  |  | 					let result = { | 
					
						
							|  |  |  |  | 						'notifyId': self.notifyId, | 
					
						
							|  |  |  |  | 						'writeId': self.writeId | 
					
						
							|  |  |  |  | 					}; | 
					
						
							|  |  |  |  | 					self.showToast(`获取服务中所有特征值OK,${JSON.stringify(result)}`); | 
					
						
							|  |  |  |  | 					resolve(result) | 
					
						
							|  |  |  |  | 				}, | 
					
						
							|  |  |  |  | 				fail: err => { | 
					
						
							|  |  |  |  | 					self.showToast(`getBLEDeviceCharacteristics` + JSON.stringify(err)); | 
					
						
							|  |  |  |  | 					reject(err); | 
					
						
							|  |  |  |  | 				} | 
					
						
							|  |  |  |  | 			}) | 
					
						
							|  |  |  |  | 		}); | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	//断开联链接
 | 
					
						
							|  |  |  |  | 	closeBLEConnection() { | 
					
						
							|  |  |  |  | 		let deviceId = this.deviceId; | 
					
						
							|  |  |  |  | 		uni.closeBLEConnection({ | 
					
						
							|  |  |  |  | 			deviceId, | 
					
						
							|  |  |  |  | 			success(res) { | 
					
						
							|  |  |  |  | 				console.log(res) | 
					
						
							|  |  |  |  | 			} | 
					
						
							|  |  |  |  | 		}) | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	notifyBLECharacteristicValue() { | 
					
						
							|  |  |  |  | 		let deviceId = this.deviceId; | 
					
						
							|  |  |  |  | 		let serviceId = this.serviceId; | 
					
						
							|  |  |  |  | 		let characteristicId = this.notifyId; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 		uni.notifyBLECharacteristicValueChange({ | 
					
						
							|  |  |  |  | 			state: true, // 启用 notify 功能
 | 
					
						
							|  |  |  |  | 			deviceId, | 
					
						
							|  |  |  |  | 			serviceId, | 
					
						
							|  |  |  |  | 			characteristicId, | 
					
						
							|  |  |  |  | 			success(res) { | 
					
						
							|  |  |  |  | 				uni.onBLECharacteristicValueChange(function(res) { | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 				}); | 
					
						
							|  |  |  |  | 			}, | 
					
						
							|  |  |  |  | 			fail(res) { | 
					
						
							|  |  |  |  | 				console.log('notifyBLECharacteristicValueChange failed:' + res.errMsg); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 			} | 
					
						
							|  |  |  |  | 		}); | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	writeBLECharacteristicValue(buffer) { | 
					
						
							|  |  |  |  | 		let deviceId = this.deviceId; | 
					
						
							|  |  |  |  | 		let serviceId = this.serviceId; | 
					
						
							|  |  |  |  | 		let characteristicId = this.writeId; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 		console.log("this: " + JSON.stringify(this)); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 		return new Promise((resolve, reject) => { | 
					
						
							|  |  |  |  | 			uni.writeBLECharacteristicValue({ | 
					
						
							|  |  |  |  | 				deviceId, | 
					
						
							|  |  |  |  | 				serviceId, | 
					
						
							|  |  |  |  | 				characteristicId, | 
					
						
							|  |  |  |  | 				value: buffer, | 
					
						
							|  |  |  |  | 				success(res) { | 
					
						
							|  |  |  |  | 					console.log('message发送成功', JSON.stringify(res)); | 
					
						
							|  |  |  |  | 					resolve(res); | 
					
						
							|  |  |  |  | 				}, | 
					
						
							|  |  |  |  | 				fail(err) { | 
					
						
							|  |  |  |  | 					console.log('message发送失败', JSON.stringify(err)); | 
					
						
							|  |  |  |  | 					reject(err); | 
					
						
							|  |  |  |  | 				} | 
					
						
							|  |  |  |  | 			}); | 
					
						
							|  |  |  |  | 		}); | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	closeBluetoothAdapter() { | 
					
						
							|  |  |  |  | 		uni.closeBluetoothAdapter({ | 
					
						
							|  |  |  |  | 			success: res => { | 
					
						
							|  |  |  |  | 				console.log(res) | 
					
						
							|  |  |  |  | 			} | 
					
						
							|  |  |  |  | 		}); | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	//若APP在之前已有搜索过某个蓝牙设备,并成功建立连接,可直接传入之前搜索获取的 deviceId 直接尝试连接该设备,无需进行搜索操作。
 | 
					
						
							|  |  |  |  | 	reconnect() { | 
					
						
							|  |  |  |  | 		(async () => { | 
					
						
							|  |  |  |  | 			try { | 
					
						
							|  |  |  |  | 				this.deviceId = this.deviceId || uni.getStorageSync("deviceId"); | 
					
						
							|  |  |  |  | 				this.serviceId = this.serviceId || uni.getStorageSync("serviceId"); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 				let result1 = await this.createBLEConnection(); | 
					
						
							|  |  |  |  | 				console.log("createBLEConnection: " + JSON.stringify(result1)); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 				let result2 = await this.getBLEDeviceServices(); | 
					
						
							|  |  |  |  | 				console.log("getBLEDeviceServices: " + JSON.stringify(result2)); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 				let result3 = await this.getBLEDeviceCharacteristics(); | 
					
						
							|  |  |  |  | 				console.log("getBLEDeviceCharacteristics: " + JSON.stringify(result3)); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 				// this.writeId = uni.getStorageSync("writeId");
 | 
					
						
							|  |  |  |  | 				// this.notifyId = uni.getStorageSync("notifyId");
 | 
					
						
							|  |  |  |  | 			} catch (err) { | 
					
						
							|  |  |  |  | 				console.log("err: " + JSON.stringify(err)); | 
					
						
							|  |  |  |  | 			} | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 		})(); | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | export default Bluetooth; |