所以我最近一直在学习信标,我试图开发一个应用程序来扫描我周围的信标并获取它们的 url,我似乎很难理解我应该为信标选择什么布局,应该是 EDDYSTONE_URL,如果是这样,我应该如何在 android 应用程序中检索这个 url,这就是我所做的:
public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
for (Beacon beacon : beacons) {
if (!rangingMessageRaised && beacon.getServiceUuid() == 0xfeaa) {
// This is a Eddystone-UID frame
Identifier namespaceId = beacon.getId1();
Identifier instanceId = beacon.getId2();
String url = UrlBeaconUrlCompressor.uncompress(beacon.getId1().toByteArray());
showAlert(TAG, "I see a beacon transmitting a url: " + url +
" approximately " + beacon.getDistance() + " meters away.");
if (beacon.getExtraDataFields().size() > 0) {
long telemetryVersion = beacon.getExtraDataFields().get(0);
long batteryMilliVolts = beacon.getExtraDataFields().get(1);
long pduCount = beacon.getExtraDataFields().get(3);
long uptime = beacon.getExtraDataFields().get(4);
Log.d(TAG, "The above beacon is sending telemetry version " + telemetryVersion +
", has been up for : " + uptime + " seconds" +
", has a battery level of " + batteryMilliVolts + " mV" +
", and has transmitted " + pduCount + " advertisements.");
}
}
}
rangingMessageRaised=true;
}
设置信标布局的代码:
// Detect the URL frame:
beaconManager.getBeaconParsers().add(new BeaconParser().
setBeaconLayout(BeaconParser.EDDYSTONE_URL_LAYOUT));
beaconManager.bind(this);
我用于 EDDYSTONE_URL 的标识符在创建信标区域时是:
try {
beaconRegion = new
Region("MyBeacons", null,null,null);
//I initially wrote this for EDDYSTONE_UID
//which seems to work for getting UID
// And distance but not url
//Identifier myBeaconNamespaceId =
//Identifier.parse("0x2f234454f4911ba9ffa6");
// Identifier myBeaconInstanceId
//Identifier.parse("0x000000000001");
// Region region = new Region("my- beacon-region", myBeaconNamespaceId, myBeaconInstanceId, null);
beaconManager.startMonitoringBeaconsInRegion(beaconRegion);
beaconManager.startRangingBeaconsInRegion(beaconRegion);
} catch (RemoteException e) {
e.printStackTrace();
}
}
我为信标布局 EDDYSTONE_URL 得到的输出是:
“我看到一个信标传输一个 url:DT∆ws#2 大约 0.00969 米远”。
url 似乎被编码或给出了一个非常奇怪的值,也许是我正在应用 url 解压缩器的 beacon.getId1() 的问题。