jclarry
jclarry
  • 发布:2020-08-06 02:02
  • 更新:2021-07-10 08:59
  • 阅读:1828

【报Bug】uni.getBLEDeviceServices android 下无法获取不到services

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Mac

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

HBuilderX类型: 正式

HBuilderX版本号: 2.8.3

手机系统: Android

手机系统版本号: Android 8.0

手机厂商: 华为

手机机型: Honor 8

页面类型: vue

打包方式: 云端

项目创建方式: HBuilderX

示例代码:

<template>
<view class="content">
<view v-for="device in devices" @tap="connect(device)">{{device.name}}</view>
</view>
</template>

<script>
export default {
data() {
return {
title: 'Hello',
devices:[]
}
},
onShow() {
var $this=this;
uni.getBluetoothAdapterState({
success(d) {
console.log(d)
}
})
uni.openBluetoothAdapter({
success() {
console.log("open success")
uni.startBluetoothDevicesDiscovery({
})
uni.onBluetoothDeviceFound(function (devices) {
console.log(devices)
for(var i=0;i<devices.devices.length;i++){
let name=devices.devices[i].name;
if(name&&name.indexOf("YK")>=0){
console.log(devices.devices[i])
$this.devices.push(devices.devices[i])
}
}
})
}
})
},
methods: {
connect(row){
uni.stopBluetoothDevicesDiscovery({
success() {
uni.createBLEConnection({
deviceId:row.deviceId,
timeout: 3000,
success(res) {
// uni.getConnectedBluetoothDevices({
// success(res) {
// console.log(res)
// }
// })
uni.getBLEDeviceServices({
// 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接
deviceId:row.deviceId,
success(res) {
console.log(res)
}
})
}
})

                }  
            })  
        }  
    }  
}  

</script>

<style>
.content {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}

.logo {  
    height: 200rpx;  
    width: 200rpx;  
    margin-top: 200rpx;  
    margin-left: auto;  
    margin-right: auto;  
    margin-bottom: 50rpx;  
}  

.text-area {  
    display: flex;  
    justify-content: center;  
}  

.title {  
    font-size: 36rpx;  
    color: #8f8f94;  
}  

</style>

操作步骤:

打开蓝牙,搜索蓝牙,找到对应的蓝牙设备,点击关闭蓝牙发现,创建蓝牙连接,获取蓝牙services。

预期结果:

可以正常获取services数据

实际结果:

services为空

bug描述:

我测试过,ios平台,微信小程序中测试都可以正常获取,但是android下就不行

2020-08-06 02:02 负责人:无 分享
已邀请:
c***@qq.com

c***@qq.com

我也遇到相同的问题,同求解决方案

1***@qq.com

1***@qq.com

你们现在这个问题解决了吗,什么方法解决的,现在我也有这样的问题

1***@163.com

1***@163.com

您好,我延时到3秒也还是获取不到,这是什么问题

Jalen_cokoino

Jalen_cokoino

看我这里,链接成功后要延时1秒以上再获取DeviceServices,https://ask.dcloud.net.cn/article/37635

同时关注一下这个链接的问题,https://ask.dcloud.net.cn/question/106785

太多坑了。。。。

代码也给你:

//console.log(deviceId);
uni.createBLEConnection({
deviceId : deviceId, //这里的deviceId为onBluetoothDeviceFound得到的deviceId
success: (res) => {
uni.hideLoading();
//self.stopBluetoothDevicesDiscovery(); //停止蓝牙搜索
self.deviceId = deviceId; //保存成功建立链接的deviceId
self.connectFlag = true; //蓝牙链接成功标志位
//self.showToast("Success", 1000);
console.log("连接成功:" + self.deviceId);
setTimeout(() => { //必要等待1.5秒以上,否则getBLEDeviceServices为空数据
self.onBLEConnectionStateChange() //监听蓝牙连接状态
self.getBLEDeviceServices(); //获取蓝牙设备所有服务
}, 1500);
},
fail: err => {
uni.hideLoading();
self.showToast("Failure", 1000);
console.log("连接失败:" + JSON.stringify(err));
self.stopBluetoothDevicesDiscovery(); //停止蓝牙搜索
}
})

谭小谭

谭小谭 - 90后前端

安卓返回services为空,ios连不上,官方有解答吗

  • 7***@qq.com

    你好,你解决了吗

    2021-01-12 11:23

  • 金荷娜

    回复 7***@qq.com: 我刚才也遇到了 你解决了?

    2021-01-12 16:35

  • 谭小谭

    回复 7***@qq.com: 只有把延时加长一点,获取的可能性大一点,还有,你们要去排除一下硬件的问题,我们这边换了一个蓝牙模块,这种情况出现的机率就低很多了

    2021-01-19 10:42

  • 7***@qq.com

    回复 谭小谭: 我换了一个设备后获取到了,但是特征值的那个写入为false(write:fasle), 你那边有遇到吗

    2021-01-19 10:51

  • 谭小谭

    回复 7***@qq.com: 你要找硬件支持写入的才行啊,硬件里很多id,让硬件工程师告诉你,哪个id是可写的

    2021-01-19 15:16

  • 7***@qq.com

    回复 谭小谭同一个打印机设备,同一套代码,IOS可以,安卓却不可以

    2021-01-19 15:45

  • 谭小谭

    回复 7***@qq.com: 这就没遇到了,换一个可写的id试试呢

    2021-01-26 09:32

金荷娜

金荷娜 - uniapp

解决了? 很急

金荷娜

金荷娜 - uniapp

在我标注的里面加 延迟 就可以获取到了 一定得在连接里加延迟

  • 7***@qq.com

    我试着这样写了,获取失败,1004

    2021-01-13 17:14

2***@qq.com

2***@qq.com - 我叫王乜乜,大家可以叫我王野野,不过我比较喜欢叫王托托,不过我真正叫王大仙!

矛讲我矛将精你呢佬,其实系有呢蓝牙得又呢蓝牙矛得。

1***@163.com

1***@163.com

let that=this;
setTimeout(function(){
console.log("定时器2秒后");
uni.getBLEDeviceServices({
deviceId: obj.deviceId,
timeout: 30000,
success(res){
console.log("获取蓝牙设备所有服务,成功");
console.log(res);
let indexs=index>=res.services.length?0:index;
for(let i=indexs;i<res.services.length;i++){
if(res.services[i].isPrimary){
let objs={"deviceId":obj.deviceId,"serviceId":res.services[i].uuid};
that.BLEDeviceCharacteristics(objs,i);
return false;
}
}
},
fail(err) {
/ console.log(err);
console.log("获取蓝牙设备所有服务,失败");
/
uni.hideLoading();
uni.showToast({
title: "获取蓝牙设备所有服务,失败",
icon: "none",
mask: true
});
}
});
},2000);

该问题目前已经被锁定, 无法添加新回复