<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>
9 个回复
c***@qq.com
我也遇到相同的问题,同求解决方案
1***@qq.com
你们现在这个问题解决了吗,什么方法解决的,现在我也有这样的问题
1***@163.com
您好,我延时到3秒也还是获取不到,这是什么问题
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
解决了? 很急
7***@qq.com
还没呢,你那边啥问题
2021-01-12 16:38
金荷娜
回复 7***@qq.com: 安卓返回services为空
2021-01-12 16:44
金荷娜
回复 7***@qq.com: 小程序没问题
2021-01-12 16:45
1***@163.com
我的设置为2000毫秒可以,1000毫秒就获取不到
2021-07-10 08:58
金荷娜 - uniapp
在我标注的里面加 延迟 就可以获取到了 一定得在连接里加延迟
7***@qq.com
我试着这样写了,获取失败,1004
2021-01-13 17:14
2***@qq.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);