uni-app 【报Bug】uni.openBluetoothAdapter安卓app蓝牙初始化没有success,complete回调
uni-app 【报Bug】uni.openBluetoothAdapter安卓app蓝牙初始化没有success,complete回调
项目名称 | 值 |
---|---|
产品分类 | uniapp/App |
PC开发环境 | Windows |
PC开发环境版本 | Windows 11 专业版 22000.176 |
HBuilderX类型 | 正式 |
HBuilderX版本 | 3.3.13 |
手机系统 | Android |
手机系统版本 | Android 11 |
手机厂商 | 小米 |
手机机型 | 11 |
页面类型 | vue |
vue版本 | vue2 |
打包方式 | 云端 |
项目创建方式 | HBuilderX |
示例代码:
uni.openBluetoothAdapter({
success(res) {
console.log('蓝牙初始化成功', res);
uni.getBluetoothAdapterState({
success(res2) {
console.log('getBluetoothAdapterState:', res2)
if (res2.available) {
that.isSearching = true;
if (res2.discovering) {
uni.showToast({
title: '正在搜索附近打印机设备',
icon: "none"
})
return;
}
//获取蓝牙设备信息
that.getBluetoothDevices()
// that.checkPemission()
} else {
uni.showModal({
title: '提示',
content: '本机蓝牙不可用',
})
}
},
complete(e) {
console.log('打印机设备', e);
}
});
},
fail() {
uni.showModal({
title: '提示',
content: '蓝牙初始化失败,请打开蓝牙',
})
},
complete(e) {
console.log('蓝牙初始化', e);
}
})
操作步骤:
- 直接运行代码
预期结果:
- complete或success有回调
实际结果:
- complete或success无回调结果,关闭蓝牙调用会触发fail回调
bug描述:
uni.openBluetoothAdapter安卓app蓝牙初始化没有success,complete回调只有fail回调,编译器版本3.4.7,hbuilderx 3.3.13.20220314
更多关于uni-app 【报Bug】uni.openBluetoothAdapter安卓app蓝牙初始化没有success,complete回调的实战教程也可以访问 https://www.itying.com/category-93-b0.html
用示例代码hello uni-app能出现你的问题吗?
更多关于uni-app 【报Bug】uni.openBluetoothAdapter安卓app蓝牙初始化没有success,complete回调的实战教程也可以访问 https://www.itying.com/category-93-b0.html
可以,真机运行在安卓手机上,打包的自定义基座,在小程序,ios app均正常
回复 1***@qq.com: 只有打包后才出现吗?标准基座测试是否正常?
回复 1***@qq.com: HBuilder X 3.4.7 Android 11 Redmi K40 ,未复现问题。
回复 DCloud_UNI_Anne: 标准基座正常,打包后出现问题,目前使用mate30和小米11均有问题
回复 1***@qq.com: 用HX 3.4.7打包后吗?
回复 DCloud_UNI_Anne:编译器版本是3.4.7,编辑器我回退到了3.3.13.20220314
回复 1***@qq.com: 未复现您的问题,请用hello uni-app示例打自定义基座重新测试看下
回复 DCloud_UNI_Anne: 我也有这个问题,请问解决了吗
uni-preset-vue-vite-ts, 我用这个也遇到这个问题. 蓝牙关闭状态有失败回调, 打开状态没有成功回调, 实际也没初始化成功
这个bug最近几个版本又出现了 ios小程序正常 安卓不行
版本号 3.95
在使用 uni-app
开发时,如果遇到 uni.openBluetoothAdapter
在安卓设备上初始化蓝牙时没有触发 success
或 complete
回调的问题,可以尝试以下几个步骤来排查和解决:
1. 检查权限
- 确保在
AndroidManifest.xml
中声明了蓝牙相关权限:<uses-permission android:name="android.permission.BLUETOOTH"/> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
- 在 Android 6.0 及以上版本,还需要动态申请定位权限,因为蓝牙扫描需要定位权限。
2. 检查设备蓝牙状态
- 确保设备的蓝牙功能已经打开。
- 可以在调用
uni.openBluetoothAdapter
之前,先检查蓝牙状态:uni.getBluetoothAdapterState({ success(res) { if (res.available) { uni.openBluetoothAdapter({ success(res) { console.log('蓝牙初始化成功', res); }, fail(err) { console.log('蓝牙初始化失败', err); }, complete() { console.log('蓝牙初始化完成'); } }); } else { console.log('蓝牙不可用'); } } });
3. 检查回调函数
- 确保
success
和complete
回调函数正确定义,并且没有拼写错误。 - 如果回调函数没有触发,可能是因为蓝牙初始化失败,但没有触发
fail
回调。可以尝试添加fail
回调来捕获错误信息。
4. 检查设备兼容性
- 某些安卓设备可能存在蓝牙适配问题,建议在多个设备上测试,确保问题不是设备特定的。
5. 调试日志
- 在
uni.openBluetoothAdapter
调用前后添加日志,确保代码执行到该位置。 - 如果可能,使用
console.log
或uni.showToast
输出调试信息,帮助定位问题。
6. 更新 uni-app 版本
- 确保使用的是最新版本的
uni-app
,旧版本可能存在已知的 bug 或兼容性问题。
7. 检查其他代码
- 确保没有其他代码干扰蓝牙初始化过程,例如其他蓝牙相关操作或异步任务。
8. 使用 try-catch
- 如果怀疑是代码执行异常导致回调未触发,可以尝试使用
try-catch
捕获异常:try { uni.openBluetoothAdapter({ success(res) { console.log('蓝牙初始化成功', res); }, fail(err) { console.log('蓝牙初始化失败', err); }, complete() { console.log('蓝牙初始化完成'); } }); } catch (e) { console.error('蓝牙初始化异常', e); }