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

13 回复

用示例代码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: 只有打包后才出现吗?标准基座测试是否正常?

回复 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 在安卓设备上初始化蓝牙时没有触发 successcomplete 回调的问题,可以尝试以下几个步骤来排查和解决:

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. 检查回调函数

  • 确保 successcomplete 回调函数正确定义,并且没有拼写错误。
  • 如果回调函数没有触发,可能是因为蓝牙初始化失败,但没有触发 fail 回调。可以尝试添加 fail 回调来捕获错误信息。

4. 检查设备兼容性

  • 某些安卓设备可能存在蓝牙适配问题,建议在多个设备上测试,确保问题不是设备特定的。

5. 调试日志

  • uni.openBluetoothAdapter 调用前后添加日志,确保代码执行到该位置。
  • 如果可能,使用 console.loguni.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);
    }
回到顶部