uni-app ios蓝牙开关问题:ios的蓝牙开关已打开,但uni.getSystemSetting().bluetoothEnabled返回的值是false,android的返回值正确

发布于 1周前 作者 zlyuanteng 来自 Uni-App

uni-app ios蓝牙开关问题:ios的蓝牙开关已打开,但uni.getSystemSetting().bluetoothEnabled返回的值是false,android的返回值正确

操作步骤:

  • 开启手机蓝牙开关,调用uni.getSystemSetting().bluetoothEnabled方法

预期结果:

  • uni.getSystemSetting().bluetoothEnabled返回值为true

实际结果:

  • uni.getSystemSetting().bluetoothEnabled返回值为false

bug描述:

  • 开启手机蓝牙开关,但是uni.getSystemSetting().bluetoothEnabled返回值为false
信息类别 详细信息
产品分类 uniapp/App
PC开发环境 Windows
PC开发环境版本 windows10
HBuilderX类型 正式
HBuilderX版本 3.98
手机系统 iOS
手机系统版本 iOS 15
手机厂商 苹果
手机机型 iPhone 6s Plus
页面类型 nvue
Vue版本 vue3
打包方式 云端
项目创建方式 HBuilderX

8 回复

看下 bluetoothError 返回的啥


这个bug是概率性问题,今天第一次运行时返回时返回true,然后再运行时就一直返回false。bluetoothError返回的是undefined

这个bug没人处理啊?

回复 1***@qq.com: 这边没有复现问题 有稳定复现的方法嚒

回复 DCloud_iOS_WZT: iPhone 6s Plus很容易出现

回复 1***@qq.com: 其他设备没问题么?你换个设备试试,如果其他设备都没问题 可能是你这个测试设备的设置问题

一样问题,真机调试时,删除ap,安装app,第一次是返回true的,多次进入页面都是true,杀掉app重新打开app再次即可复现,然后一直都是false了,直到再次删除ap,安装app,重新打开,又是true

uni-app 中,uni.getSystemSetting().bluetoothEnabled 用于获取设备的蓝牙开关状态。然而,在 iOS 上,可能会出现蓝牙开关已打开,但该接口返回 false 的情况。这可能是由于 iOS 系统的权限限制或 uni-app 接口的实现问题。

可能的原因

  1. 权限问题:iOS 系统对蓝牙的权限管理较为严格,应用可能需要明确请求蓝牙权限才能正确获取蓝牙状态。
  2. 系统限制:iOS 系统可能不允许应用直接获取蓝牙开关状态,或者在某些情况下返回的状态不准确。
  3. 接口实现问题uni-appgetSystemSetting 接口在 iOS 上的实现可能存在缺陷,导致返回的状态不正确。

解决方案

  1. 检查权限

    • 确保应用已经请求并获取了蓝牙权限。你可以在 manifest.json 中配置蓝牙权限:
      {
        "app-plus": {
          "permissions": {
            "bluetooth": {}
          }
        }
      }
    • 在代码中动态请求权限:
      uni.authorize({
        scope: 'scope.bluetooth',
        success() {
          console.log('蓝牙权限已授权');
        },
        fail() {
          console.log('蓝牙权限未授权');
        }
      });
  2. 使用原生代码获取蓝牙状态

    • 如果 uni.getSystemSetting().bluetoothEnabled 无法正确获取蓝牙状态,可以考虑使用原生代码(Objective-C/Swift)来获取蓝牙状态,并通过 uni-app 的插件机制将结果返回给前端。
  3. 使用其他接口或插件

    • 如果你需要更精确的蓝牙状态,可以考虑使用 uni-app 的蓝牙 API,如 uni.openBluetoothAdapter 来初始化蓝牙适配器,并通过回调来判断蓝牙是否可用。
    • 你也可以使用第三方插件或原生模块来获取蓝牙状态。
  4. 监听蓝牙状态变化

    • 使用 uni.onBluetoothAdapterStateChange 来监听蓝牙状态的变化,而不是直接依赖 uni.getSystemSetting().bluetoothEnabled

示例代码

// 获取蓝牙状态
uni.getSystemSetting({
  success(res) {
    console.log('蓝牙状态:', res.bluetoothEnabled);
  },
  fail(err) {
    console.log('获取蓝牙状态失败:', err);
  }
});

// 监听蓝牙状态变化
uni.onBluetoothAdapterStateChange(function(res) {
  console.log('蓝牙状态变化:', res.available);
});
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!