You need to enable JavaScript to run this app. Android系统中能否查询Alt Beacon库的最近蓝牙扫描时间?
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 21:54:00