uni-app IOS系统苹果12 13 调用蓝牙 uni.onBluetoothDeviceFound无反应 安卓鸿蒙系统及苹果15测试均正常

uni-app IOS系统苹果12 13 调用蓝牙 uni.onBluetoothDeviceFound无反应 安卓鸿蒙系统及苹果15测试均正常

开发环境 版本号 项目创建方式
Windows win10 HBuilderX
产品分类:uniapp/小程序

PC开发环境操作系统:Windows

HBuilderX类型:正式

HBuilderX版本号:3.99

第三方开发者工具版本号:3.8.11

基础库版本号:1.14.2

示例代码:

```javascript
openBluetoothAdapter() {  
    console.log('开始搜索蓝牙设备')  
    uni.openBluetoothAdapter({  
        success: (res) => {  
            this.startBluetoothDevicesDiscovery()  
        },  
        fail: (res) => {  
            console.log('请打开设备蓝牙功能')  
        }  
    })  
},  
startBluetoothDevicesDiscovery() {  
    uni.startBluetoothDevicesDiscovery({  
        services: [], //搜索目标设备的服务  
        allowDuplicatesKey: false, //搜索结果是否允许重复  
        success: (res) => {  
            this.onBluetoothDeviceFound()  
        },  
    })  
},  
onBluetoothDeviceFound() {  
    let devicesArr = []  
    uni.onBluetoothDeviceFound((res) => {  
        let devices = res.devices     
        devices.forEach((item) => {  
            if (item.name) {  
                devicesArr.push(item)  
            }  
        })  
        this.devices = devicesArr  
    })  
},

操作步骤: 小程序打开调用this.openBluetoothAdapter()

预期结果: uni.onBluetoothDeviceFound调用成功 返回搜索到的设备

实际结果: uni.onBluetoothDeviceFound 一直没有响应 也没有报错信息

bug描述: IOS系统苹果12 13 调用蓝牙 uni.onBluetoothDeviceFound没有反应(安卓鸿蒙系统经测试都是好的 苹果15也是好的)


更多关于uni-app IOS系统苹果12 13 调用蓝牙 uni.onBluetoothDeviceFound无反应 安卓鸿蒙系统及苹果15测试均正常的实战教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

补充:开发的是专有钉钉小程序。在小程序开发平台用官方的demo一样有这个问题

更多关于uni-app IOS系统苹果12 13 调用蓝牙 uni.onBluetoothDeviceFound无反应 安卓鸿蒙系统及苹果15测试均正常的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


我做的app也遇到这个问题,onBluetoothDeviceFound无反应

startBluetoothDevicesDiscovery搜索去掉services参数就可以了

请问楼主这个问题 解决了么?

uni-app 中调用 uni.onBluetoothDeviceFound 时,如果仅在 iOS 12 和 13 设备上无反应,而在其他设备(如 Android、HarmonyOS 和 iOS 15)上正常,可能是由于以下原因:

1. iOS 蓝牙权限问题

确保在 iOS 设备上已经正确获取了蓝牙权限。uni-app 在 iOS 上需要用户明确授权才能使用蓝牙功能。你可以通过以下步骤检查和处理权限问题:

  • manifest.json 中配置蓝牙权限:

    {
      "app-plus": {
        "distribute": {
          "ios": {
            "permissions": {
              "bluetooth": {
                "description": "需要使用蓝牙功能"
              }
            }
          }
        }
      }
    }
    
  • 在代码中动态请求蓝牙权限:

    uni.authorize({
      scope: 'scope.bluetooth',
      success() {
        console.log('蓝牙权限已授权');
      },
      fail() {
        console.log('蓝牙权限未授权');
      }
    });
    

2. iOS 系统版本兼容性问题

iOS 12 和 13 可能在某些 API 的实现上与较新的 iOS 版本存在差异。确保你使用的 uni-app SDK 版本支持这些系统版本。

  • 检查 uni-app 的官方文档或更新日志,确保你使用的版本支持 iOS 12 和 13。
  • 如果可能,尝试升级 uni-app 到最新版本。

3. 蓝牙设备发现逻辑问题

某些 iOS 设备可能在蓝牙设备发现过程中存在延迟或其他问题。可以尝试以下方法优化蓝牙设备发现逻辑:

  • 增加扫描时间:确保扫描时间足够长,以便设备有足够的时间发现蓝牙设备。

    uni.startBluetoothDevicesDiscovery({
      services: [],
      allowDuplicatesKey: true,
      success(res) {
        console.log('开始搜索蓝牙设备');
        setTimeout(() => {
          uni.stopBluetoothDevicesDiscovery({
            success(res) {
              console.log('停止搜索蓝牙设备');
            }
          });
        }, 10000); // 10秒后停止搜索
      }
    });
    
  • 检查设备是否在范围内:确保蓝牙设备在 iOS 设备的可发现范围内,并且设备处于可被发现的状态。

4. 调试与日志输出

在 iOS 12 和 13 设备上,开启调试模式并输出详细的日志信息,以便更好地定位问题。

uni.onBluetoothDeviceFound((res) => {
  console.log('发现蓝牙设备:', res.devices);
});
回到顶部