const app = getApp(); Page({ data: { initText: "", devicesList: [], searchDevicesList: true, isShowingModal: false, // 控制模态框是否正在显示 }, onLoad(options) { this.checkBluetoothPermissionAndInit(); }, onShow() { this.checkBluetoothPermissionAndInit(); }, async checkBluetoothPermissionAndInit() { if (this.data.isShowingModal) { return; } this.setData({ initText: "正在检查蓝牙及位置权限..." }); try { const settingRes = await wx.getSetting(); const hasBluetoothPermission = settingRes.authSetting['scope.bluetooth']; const hasLocationPermission = settingRes.authSetting['scope.userLocation']; if (hasBluetoothPermission && hasLocationPermission) { this.openBluetoothAdapter(); } else { let scopeToRequest = []; let permissionNames = []; if (!hasBluetoothPermission) { scopeToRequest.push('scope.bluetooth'); permissionNames.push('蓝牙'); } if (!hasLocationPermission) { scopeToRequest.push('scope.userLocation'); permissionNames.push('位置'); } if (scopeToRequest.length > 0) { try { await wx.authorize({ scope: scopeToRequest[0] }); this.checkBluetoothPermissionAndInit(); } catch (authErr) { if (this.data.isShowingModal) { return; } this.setData({ isShowingModal: true }); wx.showModal({ title: '提示', content: `小程序需要您的${permissionNames.join('和')}权限才能正常使用蓝牙功能。请前往手机设置开启。`, confirmText: '去开启', cancelText: '不开启', success: (modalRes) => { this.setData({ isShowingModal: false }); if (modalRes.confirm) { wx.openSetting({ success: (settingRes) => { this.checkBluetoothPermissionAndInit(); }, fail: (settingErr) => { wx.navigateBack({ delta: 1 }); } }); } else { this.setData({ initText: "权限被拒绝。" }); wx.navigateBack({ delta: 1 }); } }, fail: () => { this.setData({ isShowingModal: false }); } }); } } } } catch (err) { if (this.data.isShowingModal) { return; } this.setData({ isShowingModal: true }); wx.showToast({ title: '获取权限设置失败', icon: 'none', duration: 2000, success: () => { this.setData({ isShowingModal: false }); wx.navigateBack({ delta: 1 }); }, fail: () => { this.setData({ isShowingModal: false }); wx.navigateBack({ delta: 1 }); } }); } }, async openBluetoothAdapter() { if (this.data.isShowingModal) { return; } this.setData({ initText: "正在初始化蓝牙..." }); try { await wx.openBluetoothAdapter(); this.setData({ initText: "蓝牙初始化成功" }); this.getDeviceSettingList(); } catch (err) { this.setData({ initText: "蓝牙初始化失败。" }); if (this.data.isShowingModal) { return; } this.setData({ isShowingModal: true }); let modalContent = ''; if (err.errCode === 10001) { modalContent = "请确保手机蓝牙已开启。"; } else if (err.errMsg && (err.errMsg.includes('permission denied') || err.errCode === 10003)) { modalContent = '蓝牙或位置权限仍被拒绝,无法使用蓝牙功能。'; } else { wx.showToast({ title: `蓝牙适配器打开失败: ${err.errMsg || err.errCode}`, icon: 'none', duration: 2000, success: () => { this.setData({ isShowingModal: false }); wx.navigateBack({ delta: 1 }); }, fail: () => { this.setData({ isShowingModal: false }); wx.navigateBack({ delta: 1 }); } }); return; } wx.showModal({ title: "提示", content: modalContent, showCancel: false, success: () => { this.setData({ isShowingModal: false }); wx.navigateBack({ delta: 1 }); }, fail: () => { this.setData({ isShowingModal: false }); } }); } }, getDeviceSettingList() { // app.globalData.ppScale.plugin.Blue.visibleLog(true); this.setData({ initText: "设备搜索中..." }); app.globalData.ppScale.device.list = []; let seviceList = app.globalData.ppScale.device.setting; app.globalData.ppScale.plugin.Blue.setDeviceSetting(seviceList); let deviceNames = seviceList.map(item => item.deviceName); app.globalData.ppScale.plugin.Blue.start(deviceNames, false); app.globalData.ppScale.plugin.bus.subscribe("devicesList", (res) => { // console.log("searchDevice ===> devicesList", res); this.setData({ devicesList: res }); this.selectDevice(); }); }, selectDevice() { if(this.data.devicesList && this.data.devicesList.length && this.data.searchDevicesList) { this.setData({ searchDevicesList: false }); setTimeout(() => { app.globalData.ppScale.plugin.Blue.stopBluetoothDevicesDiscovery(); app.globalData.ppScale.device.list = this.data.devicesList; wx.redirectTo({ url: "/pages/configureDevice/configureDevice" }) }, 1000); } }, onUnload() { app.globalData.ppScale.plugin.Blue.stopBluetoothDevicesDiscovery(); this.setData({ isShowingModal: false }); } })