uni-app 蓝牙未开启调用连接蓝牙等方法无失败回调
uni-app 蓝牙未开启调用连接蓝牙等方法无失败回调
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Windows | 10 专业版 21H2 19044.3086 | HBuilderX |
产品分类:uniapp/App
PC开发环境操作系统:Windows
HBuilderX类型:正式
HBuilderX版本号:3.96
手机系统:Android
手机系统版本号:Android 11
手机厂商:斯科 (PDA手持机)
手机机型:C72
页面类型:vue
vue版本:vue3
打包方式:云端
项目创建方式:HBuilderX
示例代码:
```javascript
uni.openBluetoothAdapter({
success(res) {
resolve(res)
},
fail(err) {
reject(err)
uni.showModal({
title: '提示',
content: '使用该功能请开启蓝牙 !',
showCancel: false,
})
},
})
export function connectBluetooth(val) {
return new Promise((resolve, reject) => {
uni.showLoading({
title: '连接中...',
mask: true,
})
const timeout = setTimeout(() => {
uni.hideLoading()
uni.showToast({
icon: 'none',
title: '连接超时,请检查蓝牙是否可用 !',
})
}, 10000)
uni.createBLEConnection({
deviceId: val, //设备id
success: (res) => {
uni.hideLoading()
clearTimeout(timeout)
uni.stopBluetoothDevicesDiscovery({
success: () => {
resolve('连接成功参数:' + JSON.stringify(res))
},
})
},
fail: (err) => {
uni.hideLoading()
clearTimeout(timeout)
uni.showModal({
title: '提示',
content: '蓝牙连接失败 !',
showCancel: false,
})
reject('连接失败:' + err)
},
})
})
}
操作步骤: 第一步:init蓝牙 第二步:搜索蓝牙 第三步:在搜索或者连接蓝牙的时候关闭系统蓝牙 (此时蓝牙相关API除了初始化蓝牙有错误回调 其他都没有)
预期结果: 在未开启蓝牙的时候调用蓝牙相关API 请添加上错误回调
实际结果: 在未开启蓝牙的时候调用蓝牙相关API 没有任何提示与回调事件
bug描述: 在蓝牙初始化的uni.openBluetoothAdapter方法中 未开启蓝牙会进入fail(错误)回调中 既然如此 为什么当我未开启蓝牙调用uni.createBLEConnection等API时 成功和失败都未进入三个回调中的任意一个 让我判断他是否能正常连接或者是因为什么问题不能连接 既然未开启蓝牙调用uni.openBluetoothAdapter方法 会有错误回调 那么在蓝牙的每一个方法都应该存在 这是在实现系统健壮性必须要有的
各位麻烦看看 谢谢
在使用 uni-app 进行蓝牙开发时,如果蓝牙未开启,调用连接蓝牙等方法时没有失败回调,可能是由于以下原因:
1. 平台差异
不同平台(如 iOS 和 Android)对蓝牙 API 的实现可能存在差异。某些平台在蓝牙未开启时可能不会触发失败回调,而是直接忽略操作或抛出异常。
2. 未正确处理蓝牙状态
在调用蓝牙相关方法之前,应该先检查蓝牙是否已开启。如果蓝牙未开启,可以提示用户开启蓝牙,而不是直接调用连接蓝牙等方法。
3. 未监听蓝牙状态变化
可以通过监听蓝牙状态变化来获取蓝牙的开启和关闭状态,从而在蓝牙未开启时进行相应的处理。
解决方案
1. 检查蓝牙状态
在调用蓝牙相关方法之前,先检查蓝牙是否已开启:
uni.openBluetoothAdapter({
success(res) {
console.log('蓝牙适配器已打开');
// 在这里调用连接蓝牙等方法
},
fail(err) {
console.log('蓝牙适配器打开失败', err);
// 提示用户开启蓝牙
}
});
2. 监听蓝牙状态变化
可以通过监听蓝牙状态变化来获取蓝牙的开启和关闭状态:
uni.onBluetoothAdapterStateChange(function(res) {
console.log('蓝牙适配器状态变化', res);
if (res.available) {
console.log('蓝牙已开启');
} else {
console.log('蓝牙已关闭');
// 提示用户开启蓝牙
}
});
3. 处理蓝牙未开启的情况
在调用连接蓝牙等方法时,如果蓝牙未开启,可以提示用户开启蓝牙:
uni.getBluetoothAdapterState({
success(res) {
if (res.available) {
console.log('蓝牙已开启');
// 在这里调用连接蓝牙等方法
} else {
console.log('蓝牙未开启');
// 提示用户开启蓝牙
}
},
fail(err) {
console.log('获取蓝牙适配器状态失败', err);
}
});