在didRangeBeacon中打印beacon的距离-1m是什么意思?

我在didRangeBeacon中打印获取的beacon,有好多返回的距离是-1m,这是什么意思,意思是这些beacon都不在范围内么?还有一部分是几米,十几米,几十米,是不是跟设置的beacon功率有关系,如果在功率范围内,就可以监测到距离,没有在范围内,就显示-1m? 我现在是通过didRangeBeacon中beacon得距离进行自定义通知,我通过距离在10m内,认为进入区域,通知用户进入,我如何在方法内获得设备已经离开?纠结死了!

-1是表示这个beacon 比较远了,偶尔能出现距离,你可以把它当成不在范围,
如果某个beacon超过连续3个值都不在你设定的距离外,你可以把它当成离开了呀。

恩,了解了,有个事情不太清楚,假如我调试时,这一次编译完成,监测了一些beacon,然后修改了些东西,再次编译,又监测了另外一些beacon,那之前监测的beacon就不会监测了吧,不会对现在的beacon造成干扰吧?不是监测了一些beacon之后,系统会自动记录他并且监测么?

会记录,如果不想检测,你必须暂停,你可以通过
@property (readonly, nonatomic, copy) NSSet *monitoredRegions @property (readonly, nonatomic, copy) NSSet *rangedRegions
查看当前monitored和ranged有哪些值。

当某个beacon从有距离,到出现-1,中间会出现几次-1的情况,才彻底检查不到这个iBeacon,通过连续出现3次的话靠谱么?

连续几次你是可以控制的。目前实践的效果3次还是不错的。

1 Like

不了解怎么控制,比如现在是0.5m,移动之后变成-1,然后停留一下移动,有变成0.1m,这样的话就必须重新计算次数吧,我们如何控制它连续出现几次-1?

连续三次, -1 -1 -1这算失效, -1 -1 0.5m 算正常。

恩,有个问题我们需要确定一下,因为我们的UUID都是微信的UUID,所以初始化的时候,只初始化UUID的region,当走到一个beacon比较多的区域,一开始会出发enter方法,如果在didRangeBeacon中不初始化获取到beacon的UMM的话,那就是只进入一次enter方法是么?不会走到任意一个beacon区域的时候,都触发enter方法,是这样么?

didRangeBeacon 你只需要uuid 就能range到该uuid的所有beacon呀,如果你周围beacon太多,你用monitored监控是不合适的。RegionMonitoring.

恩,对,如果beacon太多的话,用- (instancetype)initWithProximityUUID:(NSUUID *)proximityUUID major:(CLBeaconMajorValue)major minor:(CLBeaconMinorValue)minor identifier:(NSString *)identifier;这个方法是不合适的,我的意思是如果只初始化这个方法- (instancetype)initWithProximityUUID:(NSUUID *)proximityUUID identifier:(NSString *)identifier,当监测到beacon区域的时候,会出发enter方法,什么时候出发exit方法呢,这个区域是多大?比如走到一个同样UUID的beacon时,会触发enter方法么?

exit区域大概是 周围同样uuid的所有区域总和,
只有当出去之后,再进入才会触发enter。

1 Like