目前测试用的蓝牙设备只有一个是开启的,按道理说是只会搜索出一个这设备通过,但是每次搜索都会得到两个相同的蓝牙设备信息,并且同时进入我的控制if函数内进行跳转,导致设备跳转两次页面。尝试建立iosarry 数组收集进入if里面的数据,取其中一个再跳转,发现同样会收集到两个iosarry 数组导致跳转两次;同时也尝试用ioscoant来控制进入次数,在if控制内ioscoant++,打印发现ioscoant的值都是1,没办法控制。
请问有什么办法可以只跳转一次?
我之前有一个蓝牙多次回调的问题,请问有结果了吗?
以下是我的搜索代码,跳转后调用stop停止搜索:
wx.startBluetoothDevicesDiscovery({
services: [‘FEE7’],
success: function (res) {
console.log(“开始搜寻附近的蓝牙外围设备”, res)
wx.getBluetoothDevices({
success: function (res) {
console.log(“获取所有已发现的蓝牙设备”, res)
wx.onBluetoothDeviceFound(function (devices) {
console.log(‘ios转:’, devices.devices[0].name, devices.devices[0].RSSI, devices.devices[0].deviceId)
var deviceid = devices.devices[0].deviceId;//赋值iosuuid
var iosarry = new Array();//建立一个控制数组
var ioscoant=0;
if (devices.devices[0].name == “UMStand” && Math.abs(devices.devices[0].RSSI) < 90 && Math.abs(devices.devices[0].RSSI) > 20) {
wx.navigateTo({
url: ‘/pages/opennoke/opennoke?lonum=’ + deviceid + ‘&platform=’ + “ios” + ‘&iosloum=’ + lonum
})
}
})
},
我理解你的问题是onBluetoothDeviceFound这里的回调重复发现了两个 deviceid 相同的蓝牙设备吧,那能否用一个set对象来记录之前是否发现过该deviceid的设备呢?
iOS上,蓝牙设备的deviceId在不同手机上不能保证一致,无法保证在单个手机上一直保持一致(系统更新、微信更新等原因),但我理解你现在是在单台手机上的小程序流程吧,单个设备在一个小程序的生命周期里对应的deviceId肯定是唯一的。
但是我在这判断中打印得到了两条同样的数据并且是同时进入,导致我跳转两次页面。
同样的数据是指发现的设备 deviceId 是相同的么?我的意思是命中你这条语句后,在里面的逻辑判断是否之前发现过该deviceId的设备,没发现的话才执行 navigateTo 进行页面跳转
var deviceIdSet = new Set()
if (devices.devices[0].name == “UMStand” && Math.abs(devices.devices[0].RSSI) < 90 && Math.abs(devices.devices[0].RSSI) > 20)
{
if (!deviceSet.has(devices.devices[0].deviceId))
{
deviceSet.add(devices.devices[0].deviceId)
wx.navigateTo(…)
}
}
1,我用set对象记录了该设备,代码如下:
wx.getBluetoothDevices({
success: function (res) {
console.log(“获取所有已发现的蓝牙设备”, res)
wx.onBluetoothDeviceFound(function (devices) {
console.log(‘ios转:’, devices.devices[0].name, devices.devices[0].RSSI, devices.devices[0].deviceId)
var deviceid = devices.devices[0].deviceId;//赋值iosuuid
var iosarry = new Set();//建立一个控制数组
var ioscoant=0;
if (devices.devices[0].name == “UMStand” && Math.abs(devices.devices[0].RSSI) < 90 && Math.abs(devices.devices[0].RSSI) > 20) {
iosarry.add(devices.devices[0].name);
iosarry.add(devices.devices[0].RSSI);
iosarry.add(devices.devices[0].deviceId);
iosarry.forEach(function (item) {
console.log(item.valueOf()+ ", ");
});
wx.navigateTo({
url: ‘/pages/opennoke/opennoke?lonum=’ + deviceid + ‘&platform=’ + “ios” + ‘&iosloum=’ + lonum
})
}
})
},
从ios手机上取得结果是,如下图:
,2,单个设备在一个小程序的生命周期里对应的deviceId肯定是唯一的。但是我们不能做成单个设备的小程序。