android - AltBeacon 库仅第一次显示信标,然后停止显示它们
问题描述
我正在使用altbeacon
库来检测iBeacon
. 它在第一次扫描时显示所有信标,然后一些信标丢失。
这是我的情况:
- 我有 7 个信标,首先扫描检测所有信标的应用程序。
- 如果我再次尝试扫描信标,它只显示 4 个。
我怎样才能解决这个问题?我在下面添加我的代码。
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
beaconManager = BeaconManager.getInstanceForApplication(this);
beaconManager.getBeaconParsers().add(new BeaconParser().
setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24"));
backgroundPowerSaver = new BackgroundPowerSaver(this);
beaconManager.bind(this);
return START_STICKY;
}
@Override
public void onBeaconServiceConnect() {
RangeNotifier rangeNotifier = new RangeNotifier() {
@Override
public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
if (beacons.size() > 0)
{
Beacon firstBeacon = beacons.iterator().next();
String beaconID = String.valueOf(firstBeacon.getId3());
Log.v("beacons",""+beaconID);
}
}
};
try {
beaconManager.startRangingBeaconsInRegion(new Region("buuid", Identifier.parse(buuid), null, null));
beaconManager.addRangeNotifier(rangeNotifier);
}
catch (RemoteException e) { }
}
解决方案
该代码当前正在打印出看到的第一个信标的第三个标识符:
if (beacons.size() > 0) {
Beacon firstBeacon = beacons.iterator().next();
String beaconID = String.valueOf(firstBeacon.getId3());
Log.v("beacons",""+beaconID);
}
它没有打印出看到的信标计数。如果您希望它打印出看到的信标计数,请执行此操作。
Log.v("beacon count", ""+beacons.count);
**编辑:**另外,请理解,如果您只在周围有多个信标时查看第一个信标,则由于检测的不确定顺序,它的行为可能不一致。您确实需要查看检测到的所有信标 ID 的列表,因此请使用如下循环:
Log.v("beacons", "Here are the beacons I see:");
for (Beacon beacon: beacons) {
String beaconID = String.valueOf(beacon.getId3());
Log.v("beacons","beacon id: "+beaconID);
}
上面将打印一个这样的列表:
Here are the beacons I see:
3
4
5
标识符的顺序可能从一个运行到下一个运行不同,但标识符列表通常应该是相同的,只要所有信标都保留在周围。
推荐阅读
- php - 尝试对 GET 请求进行身份验证时,PostMan 中出现错误 401 Invalid token
- python - 获取python中带有子目录的目录中的所有文件md5哈希
- javascript - 按下后退按钮时返回上一个选项卡
- javascript - Echarts日期日期聚合
- flutter - Flutter GetX 在构建方法中只调用一次获取数据
- java - Kotlin 日期解析无法正常工作
- angular - 如何在 Angular 的 ngx-doc-viewer 中禁用右键单击或文本选择选项?
- oracle - 在 Firebird 和 Oracle 之间设置 ODBC 连接
- server - Neo4j Desktop 正在运行,但是 `neo4j status` 仍然说服务器没有运行?
- javascript - msRequestFullscreen 在 keydown 事件(IE 11)的情况下不起作用