Altbeacon Android库-DidRangeBeanConsincin区域

Altbeacon Android库-DidRangeBeanConsincin区域,android,ibeacon,ibeacon-android,altbeacon,android-ibeacon,Android,Ibeacon,Ibeacon Android,Altbeacon,Android Ibeacon,我正在对信标进行测距,我的目标是处理DidRangeBeaconsisnRegion中的信标集合,以便获得集合中最近的一个,并在屏幕上显示与信标本身相关的字符串(信标1=红色,信标2=蓝色…)。我目前的ibeacons广告频率是1Hz(我还不能配置它们来提高它) 我尝试了以下方法: public void onbeacerviceconnect(){ setRangeNotifier(新的RangeNotifier(){ @凌驾 公共无效范围信标区域(收集信标,区域){ 信标最近=空; 双倍距离

我正在对信标进行测距,我的目标是处理DidRangeBeaconsisnRegion中的信标集合,以便获得集合中最近的一个,并在屏幕上显示与信标本身相关的字符串(信标1=红色,信标2=蓝色…)。我目前的ibeacons广告频率是1Hz(我还不能配置它们来提高它)

我尝试了以下方法:

public void onbeacerviceconnect(){
setRangeNotifier(新的RangeNotifier(){
@凌驾
公共无效范围信标区域(收集信标,区域){
信标最近=空;
双倍距离=100.0;
logToDisplay(beacons.size()+“集合中的信标”);
用于(信标:信标){
if(距离>信标.getDistance()){
最近的=信标;
距离=信标。getDistance();
}
}
if(最接近==null){
logToDisplay(getCurrentTimeStamp()+“| Closest=null”);
}
else if(最接近的.getId3().toInt()==1){
logToDisplay(getCurrentTimeStamp()+“|蓝色”);
}
else if(最接近的.getId3().toInt()==3){
logToDisplay(getCurrentTimeStamp()+“|红色”);
}
else if(最接近的.getId3().toInt()==4){
logToDisplay(getCurrentTimeStamp()+“|绿色”);
}//…等等,再加上一些颜色
}
});
试一试{
beaconManager.startrangbeaconregion(新区域(“MyRangUniqueId”,null,null,null));
}捕获(远程异常e){}
}
据我所知,DidRangeBeaconsisnRegion有一个beacons集合,它是上一秒看到的信标的缓冲区。由于我的信标只有1Hz的广告速率,因此收集的大小非常小,我无法得到一致的结果

我认为有两种解决办法:

  • 增加广告率(对我来说还不可能)
  • 从DidRangeBeaconsisnRegion方法中增加1秒的时间段,以便beacons集合缓冲在过去5秒内看到的信标(例如)
  • 有可能这样做吗?我怎么做?
    这是一个类似于beaconManager.setForegroundScanPeriod(5000l)的集合

    是的,你可以说什么就做什么,这应该有助于使结果更加一致


    在第一次获得
    beaconManager
    实例后添加您提到的行:
    beaconManager.setForegroundScanPeriod(5000l)

    它可以工作。非常感谢。关于这一点有一个问题:我注意到信标集合的大小等于检测到的不同信标的数量。因此,如果我在ForegroundScanPeriod(5秒)内检测到3次相同的信标,则收集大小为1。是否可以在集合中包含所有检测(即使它们来自同一信标),以便示例中的集合大小为3?抱歉,对于当前库设计,这是不可能的。