Android系统中能否查询Alt Beacon库的最近蓝牙扫描时间?
Android Alt Beacon扫描时间/次数查询方案
Alt Beacon 官方没有提供公开的API可以直接查询最近一次蓝牙扫描的发生时间、或者特定时间段内的扫描总次数,你可以通过以下两种稳定的方案自行实现统计需求:
方案1:监听扫描启停状态(最准确)
你可以通过BeaconManager提供的ScanStatusListener监听扫描的启停事件,自行记录时间和统计扫描次数:
// 初始化监听 beaconManager.setScanStatusListener(new ScanStatusListener() { @Override public void onScanStart() { // 记录本次扫描开始时间、累加扫描次数 SharedPreferences sp = getSharedPreferences("beacon_scan_stats", Context.MODE_PRIVATE); sp.edit() .putLong("last_scan_start_ts", System.currentTimeMillis()) .putInt("total_scan_count", sp.getInt("total_scan_count", 0) + 1) .apply(); } @Override public void onScanStop() { // 可选记录扫描结束时间 SharedPreferences sp = getSharedPreferences("beacon_scan_stats", Context.MODE_PRIVATE); sp.edit().putLong("last_scan_stop_ts", System.currentTimeMillis()).apply(); } });
这个方案的统计结果完全准确,无需依赖库的内部实现,适合线上生产环境使用。
方案2:通过测距回调验证扫描存活
如果你只是需要确认扫描没有异常终止,可以开启beacon测距功能,didRangeBeaconsInRegion回调会每个扫描周期触发一次,无论当前范围内是否存在可检测的beacon:
beaconManager.addRangeNotifier(new RangeNotifier() { @Override public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) { // 每次回调代表扫描正常运行,记录最新时间即可 SharedPreferences sp = getSharedPreferences("beacon_scan_stats", Context.MODE_PRIVATE); sp.edit().putLong("last_scan_active_ts", System.currentTimeMillis()).apply(); } }); // 启动全局Region的测距,不需要绑定特定的beacon ID beaconManager.startRangingBeaconsInRegion(new Region("global_check_region", null, null, null));
该方案实现简单,不需要额外处理扫描生命周期,适合做扫描存活的心跳检测。
内容的提问来源于stack exchange,提问作者John Friend
相关产品推荐
相关产品推荐

