setRangeNotifier(RangeNotifier)已被弃用?

4

我在使用alt.beacon库时,现在收到了这个警告:

warning: [deprecation] setRangeNotifier(RangeNotifier) in BeaconManager has been deprecated.

但是什么可以替代它呢?我需要从一个区域范围内定位信标,并且回调 RangeNotifier 实现这个功能是至关重要的。

public interface RangeNotifier {
    void didRangeBeaconsInRegion(Collection<Beacon> var1, Region var2);
}

有没有新图书馆应该如何工作的示例?

谢谢!

1个回答

8
从2.9版本开始,您可以拥有多个RangeNotifier。因此,不需要再调用:
beaconManager.setRangeNotifier(rangeNotifier);

只需调用:

beaconManager.addRangeNotifier(rangeNotifier);

在再次添加之前,调用beaconManager.removeAllRangeNotifiers()可能值得注意,尽管这可能是常识。我正在从一个片段中设置范围通知器,这可以添加到需要监视信标的任何活动中。如果不清除范围通知器,则最终会获得每个已添加的rangeNotifier的范围结果,当在应用程序中导航时,这可能会产生很多结果。 - WallyHale
好消息是这不是必需的。rangeNotifiers集合被定义为Set:protected final Set<RangeNotifier> rangeNotifiers = new CopyOnWriteArraySet<>();因此,如果您多次添加相同的notifier,则应该只会替换已经存在的那个。 - davidgyoung
嗯嗯嗯嗯……对我来说好像不是这样的情况。同一片段会添加到各种活动中。我发现,从菜单(带有信标检测)转到活动(带有信标检测),然后再返回,重复5次,每秒就会触发5个范围触发器!由于代码未更改,因此使用相同的通知器,唯一的区别可能是在UI中显示信标时使用了getActivity引用?这会改变通知器并使其独特吗? - WallyHale
啊,也许问题在于每次片段都是不同的对象实例。在这种情况下,清除旧的通知器可能是正确的方法。 - davidgyoung

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接