uni-app 蓝牙模块能打开但完全搜索不到设备
uni-app 蓝牙模块能打开但完全搜索不到设备
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Windows | win11 | HBuilderX |
产品分类:uniapp/App
PC开发环境操作系统:Windows
HBuilderX类型:正式
HBuilderX版本号:3.99
手机系统:Android
手机系统版本号:Android 12
手机厂商:不止一台,能拿到的手机都试了
手机机型:不止一台
页面类型:vue
vue版本:vue2
打包方式:云端
示例代码:
uni.openBluetoothAdapter({
success:(res)=>{
console.log('蓝牙模块打开成功')
uni.startBluetoothDevicesDiscovery({
success(res) {
console.log('startBluetoothDevicesDiscovery:')
console.log(res)//{"errMsg":"startBluetoothDevicesDiscovery:ok"}
}
})
uni.onBluetoothDeviceFound(function (devices) {
console.log('检索到的蓝牙设备:')
console.dir(devices) //这里完全就是个空的
})
setTimeout(()=>{
uni.getBluetoothAdapterState({
success(res) {
console.log(res)
/* 这个打印出来是:
{
"discovering": true,
"available": true,
"errMsg": "getBluetoothAdapterState:ok"
} */
}
})
}, 1000)
},
fail:(res)=>{
console.log('蓝牙模块打开失败',res)
},
complete:(e) =>{
console.log('complete:')
console.log(e)//{"errMsg":"openBluetoothAdapter:ok"}
}
})
操作步骤:
- 直接在onLoad里面运行上面的代码
预期结果:
- 打印出搜索到的蓝牙设备列表
实际结果:
- 完全搜索不到
bug描述:
- 用hbuilder云打包的app和直接用hbuilder连手机调试,createBLEConnection始终连接不上,后来尝试startBluetoothDevicesDiscovery直接检索蓝牙列表,发现也检索不出来(手机蓝牙和其他蓝牙软件都能查到),干脆新建了一个工程,单纯的就是检索蓝牙列表,也是空的,感觉完全搜索不到蓝牙设备了。(用getBluetoothAdapterState查了下状态都正常)
- 定位也都开了的。。。权限也有
- 代码和打印信息如图。
有人能解决一下吗?
用手机自带的蓝牙连接了蓝牙后,搜索不到
uni.startBluetoothDevicesDiscovery({
success(res) {
// console.log(‘开始搜索’, res);
uni.onBluetoothDeviceFound(function(el) {
// console.log(‘找到蓝牙名字:’,el, el.devices[0].name);
})
},
fail(err) {
console.log(‘搜索失败’, err)
},
})
谢谢,这样试过了的,一样的,完全搜索不到。
有官方技术人员支持吗?真的是按文档最简单搜索列表都出不来啊
。。。。有人理理吗?
。。。
我还没有 用过 uni 写过 蓝牙 要不要 在 微信小程序里 试试, 看看 微信小程序的 文档, 如果可以的话 , 那可能 就是 uni 在app端有点bug
回复 3***@qq.com: 微信小程序是可以的,最开始就是同一套代码,在微信小程序里面没问题,后来要做app,就把那段代码拷过来,wx.改成uni.,然后离线打包也没问题的。但后来因为加了高德地图,离线打包出错,就改成了云打包,然后就发现蓝牙就不行了。。。所以后来为了测试我就建了这个项目做个简单的蓝牙搜索,才发现直接用hbuilder手机调试也是连搜索蓝牙都不行了。。。
有技术人员能看看吗?真的就是最简单的搜蓝牙列表,手机也开了定位,自己实在想不出还有什么别的能尝试的办法了。
有技术人员能解答一下吗?uniapp还有技术人员维护吗?
。。。uniapp还有维护的吗?
给app开关一下附件设备权限就能搜到,这个bug是uni-app现在会自动获取附件设备权限,但又不能用
回复 1***@qq.com: 附近设备权限先关掉,在开启
回复 4***@qq.com: 试了下,还是不行T_T
位置权限给了么,定位功能开了吗
都打开了的
uniapp只支持ble的蓝牙 可能你的是spp经典蓝牙 所以搜索不到
都是ble蓝牙,以前都可以的,以前用本地打包都没问题,这次是直接用hbuild调试和离线打包就不行了。。。同样的代码,微信小程序能搜到周边的蓝牙设备
对了设置的权限:
[
“<uses-permission android:name=“android.permission.CALL_PHONE”/>”,
“<uses-permission android:name=“android.permission.CAMERA”/>”,
“<uses-feature android:name=“android.hardware.camera”/>”,
“<uses-feature android:name=“android.hardware.camera.autofocus”/>”,
“<uses-permission android:name=“android.permission.ACCESS_COARSE_LOCATION”/>”,
“<uses-permission android:name=“android.permission.ACCESS_FINE_LOCATION”/>”,
“<uses-permission android:name=“android.permission.ACCESS_LOCATION_EXTRA_COMMANDS”/>”,
“<uses-permission android:name=“android.permission.ACCESS_MOCK_LOCATION”/>”,
“<uses-permission android:name=“android.permission.ACCESS_NETWORK_STATE”/>”,
“<uses-permission android:name=“android.permission.ACCESS_WIFI_STATE”/>”,
“<uses-permission android:name=“android.permission.BLUETOOTH”/>”,
“<uses-permission android:name=“android.permission.BLUETOOTH_ADMIN”/>”,
“<uses-permission android:name=“android.permission.BLUETOOTH_PRIVILEGED”/>”,
“<uses-permission android:name=“android.permission.CHANGE_NETWORK_STATE”/>”,
“<uses-permission android:name=“android.permission.CHANGE_WIFI_STATE”/>”,
“<uses-permission android:name=“android.permission.FLASHLIGHT”/>”,
“<uses-permission android:name=“android.permission.MOUNT_UNMOUNT_FILESYSTEMS”/>”,
“<uses-permission android:name=“android.permission.GET_ACCOUNTS”/>”,
“<uses-permission android:name=“android.permission.READ_LOGS”/>”,
“<uses-permission android:name=“android.permission.READ_PHONE_STATE”/>”,
“<uses-permission android:name=“android.permission.VIBRATE”/>”,
“<uses-permission android:name=“android.permission.WAKE_LOCK”/>”,
“<uses-permission android:name=“android.permission.WRITE_SETTINGS”/>”,
“<uses-permission android:name=“android.permission.WRITE_EXTERNAL_STORAGE”/>”,
“<uses-permission android:name=“android.permission.REQUEST_INSTALL_PACKAGES”/>”,
“<uses-permission android:name=“android.permission.INTERNET”/>”
]
app模块 勾选了吗? BLUETOOTH_SCAN 这个可以加下
回复 沐子鱼: android.permission.BLUETOOTH_SCAN 这个吗?刚刚加了,也一样。。。app模块里面也勾选了低功耗蓝牙的。
回复 沐子鱼: 这个测试项目是用的标准基座
有技术人员能解答一下吗?
看下位置信息是否打开 ble需要打开位置信息 才能检索到
回复 沐子鱼: 位置信息权限打开了的
那就不知道了。。。
回复 沐子鱼: 请问你们手机直接用云打包或者hbuilder调试蓝牙这块没问题吗?
回复 1***@qq.com: 我碰到 没搜索到的情况 就几种 1.蓝牙是spp模式非ble 2.位置信息权限未打开 其它没碰到过了 3.当然会用比的蓝牙调试工具测试,如果还是未搜到直接找蓝牙提供商解决
回复 沐子鱼: 谢谢。我们是ble蓝牙,位置信息也都开了,而且办公室好多蓝牙设备,现在是一个设备都搜不出,几台手机同时测了都这样,所以很奇怪,但是离线打包的话可以,感觉是权限问题,但比较了一下权限又都给了,实在是自己找不出原因了。。。
targetSdk是多少
没有设置targetSdk,示例代码的这个目前还只是用hbuilder调试就发现不行。
在开发使用uni-app进行蓝牙设备搜索时,如果遇到蓝牙模块能打开但完全搜索不到设备的问题,这通常涉及多个方面的排查。以下是一个基于uni-app蓝牙API使用的代码示例以及一些可能的排查思路,希望能帮助你定位问题。
代码示例
首先,确保你已经在manifest.json
中配置了蓝牙权限。
"mp-weixin": { // 示例为微信小程序配置,其他平台类似
"appid": "your-app-id",
"setting": {
"bluetooth": true
}
}
接着,在你的uni-app项目中,可以按照以下步骤进行蓝牙操作:
- 初始化蓝牙适配器
uni.openBluetoothAdapter({
success: function(res) {
console.log('蓝牙适配器初始化成功', res);
startDiscovery();
},
fail: function(err) {
console.error('蓝牙适配器初始化失败', err);
}
});
- 开始搜索蓝牙设备
function startDiscovery() {
uni.startBluetoothDevicesDiscovery({
allowDuplicatesKey: false,
success: function(res) {
console.log('开始搜索蓝牙设备', res);
// 监听找到新设备的事件
uni.onBluetoothDeviceFound(function(devices) {
devices.devices.forEach(device => {
console.log('找到蓝牙设备', device);
});
});
},
fail: function(err) {
console.error('搜索蓝牙设备失败', err);
},
complete: function() {
// 停止搜索
setTimeout(() => {
uni.stopBluetoothDevicesDiscovery({
success: function() {
console.log('停止搜索蓝牙设备');
}
});
}, 10000); // 例如,搜索10秒后停止
}
});
}
排查思路
-
权限问题:确保应用有蓝牙权限,并且在设备设置中蓝牙是开启的。
-
设备兼容性:某些设备可能不支持被其他设备发现,或者蓝牙版本不兼容。
-
蓝牙状态:在调用搜索之前,确保蓝牙适配器已经成功初始化。
-
API调用顺序:严格按照API文档的顺序调用,如先初始化再搜索。
-
错误处理:仔细查看控制台输出的错误信息,可能会有更具体的失败原因。
-
设备名称或MAC:如果知道目标设备的名称或MAC地址,可以尝试直接连接而不是搜索。
通过上述代码示例和排查思路,你应该能够定位问题所在。如果问题依旧存在,建议查看uni-app的官方文档或社区论坛,看看是否有其他开发者遇到并解决了类似的问题。