【发布时间】:2020-02-20 10:32:24
【问题描述】:
我创建了一个 android (java) 应用程序,它使用 altbeacon 库 (github page) 通过蓝牙模块检测信标。
信标配置有 Eddystone UID、广播间隔为100ms 的协议和强传输功率级别 (10dBm)。
我希望能够以10Hz(即100ms)的频率检测信标的RSSI值。
我已经准备了一个实现altbeacon库的服务,相关部分如下图:
mBeaconManager = BeaconManager.getInstanceForApplication(this);
beaconRegion = new Region("beacon_region", null, null, null);
// use Eddystone protocol
mBeaconManager.getBeaconParsers().add(new BeaconParser().
setBeaconLayout(BeaconParser.EDDYSTONE_UID_LAYOUT));
mBeaconManager.setAndroidLScanningDisabled(true);
mBeaconManager.setForegroundScanPeriod(100l); // scan frequency
mBeaconManager.setForegroundBetweenScanPeriod(0);
我看到信标并获得 RSSI 值的回调 didRangeBeaconsInRegion 是这样的:
@Override
public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
Log.i(BeaconDataCollectorService.class.getSimpleName(), String.format("Found %s beacons in range", beacons.size()));
}
我的问题是什么? 运行应用程序,我注意到在 didRangeBeaconsInRegion 中,我经常看不到所有信标。
我运行了几秒钟的数据收集,将获得的数据创建为 csv 格式,您可以看到我经常有 0(表示未检测到信标);我把这个csv的分享放到pastebin(https://pastebin.com/zkUZC5R4)
如何通过始终能够检测到所有信标来提高扫描频率?
使用的altbeacon版本:
implementation 'org.altbeacon:android-beacon-library:2.16.3'
Android 版本:9
谢谢
【问题讨论】:
标签: android bluetooth bluetooth-lowenergy beacon altbeacon