如何使用 Android Beacon Library 在监控模式下从 Eddystone Beacon 获取 url?

How to get url from Eddystone Beacon on monitoring mode using Android Beacon Library?

我已经看到一些示例如何通过测距而不是通过监视来获取 Eddystone 信标的 URL 帧

beaconManager.setRangeNotifier(new RangeNotifier() {
    @Override
    public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
        for (org.altbeacon.beacon.Beacon beacon: beacons) {
            if (beacon.getServiceUuid() == 0xfeaa && beacon.getBeaconTypeCode() == 0x10) {
                // This is a Eddystone-URL frame
                String url = UrlBeaconUrlCompressor.uncompress(beacon.getId1().toByteArray());
                Log.d("Eddystone", "I see a beacon transmitting a url: " + url +
                        " approximately " + beacon.getDistance() + " meters away.");
            }
        }
    }
});

didRangeBeaconsInRegion 上有一个 org.altbeacon.beacon.Beacon 参数。但是为了监控 didEnterRegion 只有 Region 作为参数。

 @Override
 public void didEnterRegion(Region region) {

 }

那么,如何在监控模式下获得 eddysone 信标的 url?可能吗?

您必须使用测距 API 来读取实际标识符。虽然可以使用监控来检测 Eddystone-URL 信标传输,因为该帧具有只有一个标识符(URL),您必须根据预先知道的 URL 标识符(不是很有用)进行监视,或者监视所有标识符。

在后一种情况下,这会产生读取标识符的问题,因为监控回调只有您描述的区域对象。

解决方法是在监控的同时进行测距。测距回调将为您提供检测到的信标的完整列表,并让您可以访问 URLs.