uni-app iso 执行plus.bluetooth.getBLEDeviceRSSI success时,正常输出。fail时,不输出任何结果

uni-app iso 执行plus.bluetooth.getBLEDeviceRSSI success时,正常输出。fail时,不输出任何结果

产品分类:

uniapp/App

PC开发环境操作系统:

Windows

PC开发环境操作系统版本号:

win10

HBuilderX类型:

正式

HBuilderX版本号:

3.2.9

手机系统:

iOS

手机系统版本号:

iOS 13.1

手机厂商:

苹果

手机机型:

iphone7

页面类型:

vue

打包方式:

云端

项目创建方式:

HBuilderX

示例代码:

plus.bluetooth.getBLEDeviceRSSI({
deviceId:this.deviceId,
success:function(e){
self.signNum = e.RSSI;
//console.log('RSSI12: '+self.signNum );
},
fail:function(e){
console.log('get RSSI failed: ');
}
});

操作步骤:

plus.bluetooth.getBLEDeviceRSSI({
deviceId:this.deviceId,
success:function(e){
self.signNum = e.RSSI;
//console.log('RSSI12: '+self.signNum );
},
fail:function(e){
console.log('get RSSI failed: ');
}
});

预期结果:

console.log('get RSSI failed: ');

实际结果:

无输出

bug描述:

ios可以正常读到 rssi 数值,当蓝牙丢失后,ios执行不了,fail:function(e){console.log('get RSSI failed: ');}log无输出,无反应,不执行。安卓版没问题正常输出console.log


更多关于uni-app iso 执行plus.bluetooth.getBLEDeviceRSSI success时,正常输出。fail时,不输出任何结果的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app iso 执行plus.bluetooth.getBLEDeviceRSSI success时,正常输出。fail时,不输出任何结果的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这是一个iOS平台特定问题,可能与uni-app底层对蓝牙API的异常处理机制有关。从你的代码和描述来看,当蓝牙设备丢失时,iOS端的fail回调没有被触发,而Android端正常。

可能的原因和解决方案:

  1. iOS蓝牙API的异步特性:iOS底层蓝牙API在某些异常情况下可能不会立即触发错误回调,而是进入等待状态。建议在调用getBLEDeviceRSSI前先检查蓝牙连接状态。

  2. 添加超时机制:由于iOS可能不触发fail回调,可以手动实现超时控制:

let timeoutFlag = false
const timeout = setTimeout(() => {
    timeoutFlag = true
    console.log('get RSSI timeout')
}, 3000) // 3秒超时

plus.bluetooth.getBLEDeviceRSSI({
    deviceId: this.deviceId,
    success: function(e) {
        if(!timeoutFlag) {
            clearTimeout(timeout)
            self.signNum = e.RSSI
        }
    },
    fail: function(e) {
        if(!timeoutFlag) {
            clearTimeout(timeout)
            console.log('get RSSI failed:', JSON.stringify(e))
        }
    }
})
  1. 检查设备连接状态:在获取RSSI前确认设备是否已连接:
// 先检查蓝牙设备是否已连接
plus.bluetooth.getConnectedBluetoothDevices({
    success: function(res) {
        const device = res.devices.find(d => d.deviceId === self.deviceId)
        if(!device) {
            console.log('设备未连接')
            return
        }
        // 设备已连接,再获取RSSI
        plus.bluetooth.getBLEDeviceRSSI({
            deviceId: self.deviceId,
            success: function(e) {
                self.signNum = e.RSSI
            },
            fail: function(e) {
                console.log('get RSSI failed:', JSON.stringify(e))
            }
        })
    }
})
  1. 错误信息输出:修改fail回调以输出完整的错误信息,便于调试:
fail: function(e) {
    console.log('get RSSI failed:', JSON.stringify(e))
}
回到顶部