uni.openBluetoothAdapter失败常见原因:模拟器不支持;iOS需配置manifest权限及NSBluetoothAlwaysUsageDescription;Android 12+需动态申请bluetoothScan/connect权限并处理定位权限;必须等待openAdapter成功后再调startDiscovery,且onBluetoothDeviceFound须提前注册; deviceId须严格使用回调返回值,格式校验防大小写错误;连接后需监听onBLEConnectionStateChange确认稳定再查服务与特征值。uni-app App端调用uni.openBluetoothAdapter失败的常见原因App端蓝牙功能在真机上才能运行,模拟器里调用uni.openBluetoothAdapter必失败,且不会报错,只会静默卡住或回调不触发。iOS 和 Android 行为还不一样:iOS 需提前在 manifest.json 里勾选「蓝牙」权限并填写 NSBluetoothAlwaysUsageDescription;Android 则必须动态申请 android.permission.BLUETOOTH_SCAN(Android 12+)和 android.permission.BLUETOOTH_CONNECT(Android 12+),老版本还需 android.permission.ACCESS_FINE_LOCATION------因为系统把蓝牙扫描归类为位置行为。实操建议:检查 manifest.json → app-plus → permissions 是否已完整配置蓝牙相关权限项Android 12+ 必须调用 uni.authorize({scope: 'scope.bluetoothScan'}) 和 uni.authorize({scope: 'scope.bluetoothConnect'}),不能只授权一次iOS 真机首次运行时,uni.openBluetoothAdapter 成功后才会弹出系统权限框,不是之前弹调用前先 uni.getSystemInfoSync().platform === 'ios' 分支处理,避免安卓逻辑误走 iOS 路径搜索设备时uni.startBluetoothDevicesDiscovery没返回结果最常被忽略的是:没等 uni.openBluetoothAdapter 完全 success 就直接 start discovery,或者 discovery 启动后没监听 uni.onBluetoothDeviceFound ------ 这个监听必须在 start 前注册,且仅对本次 discovery 有效,重启就得重绑。实操建议:确保 uni.openBluetoothAdapter 的 success 回调里再调 uni.startBluetoothDevicesDiscoveryuni.onBluetoothDeviceFound 必须在 start 前注册,且不要用箭头函数(this 绑定问题会导致监听失效)Android 下若仍无设备,尝试传参 {services: [], allowDuplicatesKey: true},某些设备广播时不带 service UUID,空 services 才能扫到iOS 对非标准广播包过滤更严,如果设备是自定义 BLE 协议,务必确认它广播了 0x1800(Generic Access)等基础 service连接设备后uni.createBLEConnection报错errCode: 10005errCode: 10005 是「连接超时」,不是设备不存在。根本原因是:调用 uni.createBLEConnection 时传入的 deviceId 不是 uni.onBluetoothDeviceFound 返回的那个,而是从列表里随便取的、或缓存旧值、或大小写混用(iOS 设备 ID 全大写,Android 可能小写)。 Shakespeare 一款人工智能文案软件,能够创建几乎任何类型的文案。
相关推荐
Flittly6 小时前
【LangGraph新手村系列】(5)时间旅行:浏览历史、分叉时间线与修改过去渣渣盟6 小时前
Mysql入门到精通全集(SQL99)包含关系运算,软考数据库工程师复习首选dishugj6 小时前
HANA 数据库的核心进程架构2301_782040456 小时前
CSS Flex布局中如何实现导航栏与Logo的左右分布_利用justify-content- space-between.柒宇.7 小时前
Redis主从复制集群搭建详解yaoxin5211237 小时前
400. Java 文件操作基础 - 使用 Buffered Stream I/O 读取文本文件2301_808414387 小时前
MySQL中的函数Mahir087 小时前
MySQL 数据一致性的基石:三大日志( redo log/undo log/binlog)与两阶段提交(Prepare 阶段和Commit 阶段)深度解密用户8356290780517 小时前
使用 Python 自动创建 Excel 折线图x***r1518 小时前
dbeaver-ce-24.1.3-x86_64-setup安装步骤详解(附DBeaver数据库管理与SQL编写教程)