You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

AltBeacon技术问题:屏幕关闭时无法检测到Beacon

Android 15下AltBeacon屏幕关闭无法检测Beacon的解决配置

环境信息

  • BLE库:AltBeacon(v.2.20.3)
  • Android版本:15
  • 测试设备:Pixel 6a

问题场景

开发BLE网关应用,需后台持续扫描Beacon并上传数据至服务器,以下场景均正常:

  • 屏幕开启、应用前台
  • 屏幕开启、应用后台
  • 屏幕开启、应用已终止
  • 屏幕开启、设备锁定
    屏幕关闭时,扫描执行、回调触发却无法检测到Beacon。

需补充的配置及修复方法

1. 申请并使用唤醒锁权限

Android 12+(含15)在屏幕关闭时会限制BLE扫描的硬件资源,需通过唤醒锁维持必要的扫描状态:

  • AndroidManifest.xml中添加权限:
<uses-permission android:name="android.permission.WAKE_LOCK" />
  • 扫描期间持有部分唤醒锁:
PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyApp:BLEScanLock");
wakeLock.acquire(10 * 60 * 1000L); // 按需设置持有时长,扫描结束后调用wakeLock.release()释放

2. 调整AltBeacon后台扫描参数

针对屏幕关闭场景,需配置库的后台扫描策略,避免系统限流:

BeaconManager beaconManager = BeaconManager.getInstanceForApplication(this);
// 缩短后台扫描周期,提升检测概率
beaconManager.setBackgroundScanPeriod(1000);
beaconManager.setBackgroundBetweenScanPeriod(5000);
// 禁用系统调度扫描,改用库的后台扫描逻辑
beaconManager.setEnableScheduledScanJobs(false);
beaconManager.setBackgroundMode(true);

3. 申请POST_NOTIFICATIONS权限

Android 13+要求后台运行的应用必须获得通知权限,否则系统会限制其后台活动(包括BLE扫描):

  • AndroidManifest.xml中添加:
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
  • 运行时动态向用户申请该权限。

4. 排除电池优化限制

Pixel设备的电池优化会在屏幕关闭时压制应用后台活动,需将应用加入白名单:

  • 手动引导:设置 → 电池 → 电池优化 → 找到应用 → 选择「不优化」
  • 代码跳转设置页:
Intent intent = new Intent();
String packageName = getPackageName();
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
if (!pm.isIgnoringBatteryOptimizations(packageName)) {
    intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
    intent.setData(Uri.parse("package:" + packageName));
    startActivity(intent);
}

5. 确认后台位置权限

Android 12+的BLE扫描依赖位置权限,屏幕关闭时前台位置权限会失效,需申请后台权限:

  • AndroidManifest.xml中添加:
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
  • 运行时动态申请后台位置权限,确保用户授权。

额外排查方向

  • 检查Beacon广播功率:低功率Beacon在屏幕关闭时可能因设备接收灵敏度下降无法被检测
  • 测试其他Android 15设备:排除Pixel 6a的特定系统限制

内容的提问来源于stack exchange,提问作者Saphirel

火山引擎 最新活动