我已经看到一些示例如何通过范围获取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 ,只有区域作为参数。
@Override
public void didEnterRegion(Region region) {
}
那么,如何在监控模式下获取eddysone信标的网址?有可能吗?
答案 0 :(得分:1)
您必须使用范围API来读取实际标识符。虽然可以使用监视来检测Eddystone-URL信标传输,但因为该帧只有一个标识符(URL),您必须根据事先了解URL标识符(不是非常有用)进行监控,或监控所有标识符。
在后一种情况下,这会产生读取标识符的问题,因为监视回调只有您描述的区域对象。
解决方案是在监控的同时调整范围。范围回调将为您提供检测到的信标的完整列表,并允许您访问URL。