问题描述
我在使用多个信标来执行一个在特定距离为特定信标生成特定事件的应用程序时遇到一些问题。
问题是我的当前代码无法区分信标,因为最后一个在不到两米的距离处被检测到的信标是触发事件的信标。
如果我距离信标2不到两米,而信标1则在6米之外,并且最后一个要检测到的信标是1(因为它们随机进入didRangeBeaconsInRegion),它将通过设置距离来触发信标1事件。信标2尽管在10米外,但这没有任何意义!!!!
我还注意到,无论我将每个信标放置在什么地方,我的信标都具有相同的距离,我想知道这是否是因为它们都具有相同的UUID并链接了算法,还是我必须定义的问题每个信标的区域(目前我仅为所有信标定义一个区域)
我的问题是我的所有信标都具有相同的UUID,我只能通过MAC地址来区分它们,我不知道这是否是真正的问题,或者我可能需要为每个信标定义一个区域,所以如果我有20个信标,则需要定义20个不同的区域。问题是我无法执行此操作,因为区域已通过UUID过滤,并且我的所有信标都具有相同的UUID。
我不太了解这些区域及其UUID的工作原理,因为真正的UUID是我的信标,所以我很忙。
这是我的代码:
beaconManager.addRangeNotifier(new RangeNotifier() {
@Override
public void didRangeBeaconsInRegion(Collection<Beacon> beacons,Region region) {
for(Beacon oneBeacon : beacons){
d=oneBeacon.getdistance();
Log.d("FUERADERANGO"," BEACONMAC:" + oneBeacon.getBluetoothAddress() + " distance: " + oneBeacon.getdistance() );
if (d<2.0){
d=oneBeacon.getdistance();
if(oneBeacon.getBluetoothAddress().equals("54:6C:0E:2B:C7:68")){//beacon 1
Log.d(TAG," BEACON1 CON MAC:" + oneBeacon.getBluetoothAddress() + "DETECTADO!!" );
Toast.makeText(MainActivity.this,"Beacon1 EnconTrado!",Toast.LENGTH_LONG).show();
} else if(oneBeacon.getBluetoothAddress().equals("58:93:D8:DE:F3:63")){//beacon 2
Log.d(TAG," BEACON2 CON MAC:" + oneBeacon.getBluetoothAddress() + "DETECTADO!!" );
Toast.makeText(MainActivity.this,"Beacon2 EnconTrado!",Toast.LENGTH_LONG).show();
}
}
// try {
// Thread.sleep(10000);
// } catch (InterruptedException e) {
// e.printstacktrace();
// }
}
}
});
try {
beaconManager.startMonitoringBeaconsInRegion(new Region("myRangingUniqueId",null,null));
} catch (remoteexception e) {
e.printstacktrace();
}
如果有人知道正确的程序是什么,以便信标不会彼此“烦扰”,并且能够在特定距离为每个事件分配特定事件,我将不胜感激。
我认为错误可能是:
-每个信标需要一个唯一的uuid -每个信标需要一个独特的区域 -无法定义区域或距离捕获过程
对于两个共享uuid的信标,无论我将它们放在何处,它们给我的距离参数都是相同的,最后一个访问didDangeBeaconsInRegion()的信标会更新两者的距离。
d1=50.0; //I initialize the variables outside of "didRangeBeaconsInRegion ()" so that if it is not updated by its corresponding beacon,it does not point to null and the program crashes
d2=50.0;
if(oneBeacon.getBluetoothAddress().equals("54:6C:0E:2B:C7:68")) {
d1=oneBeacon.getdistance();
}
if(oneBeacon.getBluetoothAddress().equals("58:93:D8:DE:F3:63")) {
d2=oneBeacon.getdistance();
}
if(oneBeacon.getBluetoothAddress().equals("54:6C:0E:2B:C7:68") && d1<2.0) {
Log.d(TAG," BEACON1 WITH MAC:" + oneBeacon.getBluetoothAddress() + "DETECTED!!" ); //event 1
}
if(oneBeacon.getBluetoothAddress().equals("58:93:D8:DE:F3:63") && d2<2.0) {
Log.d(TAG," BEACON2 WITH MAC:" + oneBeacon.getBluetoothAddress() + "DETECTED!!" ); //event 1
}
但它也不起作用,尽管两个信标之间的距离非常不同,但它们始终会更新相同的距离,就好像它们充当单个信标一样,尽管两个信标具有相同的uuid但又具有不同的mac。我不明白,这没有道理。
这是一个非常引人注目的问题,我的想法已经用光了。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)