You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android 8.1 Pixel 2熄屏后BLE扫描失效求助

解决Android 8.1 Pixel 2熄屏时BLE扫描停止的问题

我之前在处理Android 8.1设备的BLE扫描时碰到过完全一样的问题,结合你给出的Logcat提示Cannot start the unfiltered scan in screen-off. This scan will be resumed later...,核心原因是Android 8.1对熄屏状态下的BLE扫描做了严格限制——不允许无过滤或过滤规则无效的扫描,哪怕你以为设置了过滤,可能细节上没符合系统要求。下面是几个经过验证的解决思路:

  • 确保扫描过滤器真正生效
    Android 8.1要求熄屏扫描必须带有明确、有效的过滤条件,空过滤器或者过于宽泛的规则都会被判定为"无过滤扫描"而被系统禁用。比如你可以指定具体的服务UUID、设备名称前缀或者制造商数据:

    // 示例:设置指定服务UUID的扫描过滤器
    List<ScanFilter> filters = new ArrayList<>();
    ScanFilter uuidFilter = new ScanFilter.Builder()
            .setServiceUuid(ParcelUuid.fromString("0000FFE0-0000-1000-8000-00805F9B34FB"))
            .build();
    filters.add(uuidFilter);
    
    // 搭配低功耗扫描模式更适配熄屏场景
    ScanSettings scanSettings = new ScanSettings.Builder()
            .setScanMode(ScanSettings.SCAN_MODE_LOW_POWER)
            .build();
    
    bluetoothLeScanner.startScan(filters, scanSettings, yourScanCallback);
    

    注意:如果过滤规则太模糊(比如只设置了长度为0的设备名称),系统依然会判定为无效过滤,导致扫描被暂停。

  • 将扫描逻辑绑定到前台服务
    Android 8.1之后后台进程优先级极低,熄屏后很容易被系统限制资源。把BLE扫描放在前台服务中运行,能大幅提升进程优先级,避免被系统终止或限制扫描:

    1. 创建继承自Service的前台服务类;
    2. 在服务内部启动BLE扫描;
    3. 调用startForeground()方法,传入一个可见的通知(Android 8.0+需要先创建通知渠道)。
      这样即使设备熄屏,前台服务的扫描也能持续运行。
  • 关闭应用的电池优化
    Pixel 2的Doze模式在熄屏后会严格限制后台应用的硬件访问,包括BLE扫描。你可以:

    • 手动进入系统设置 → 电池 → 电池优化,找到你的应用并设置为"不优化";
    • 或者在代码中申请忽略电池优化的权限(需要用户手动授权):
      PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
      String packageName = getPackageName();
      if (!powerManager.isIgnoringBatteryOptimizations(packageName)) {
          Intent intent = new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
          intent.setData(Uri.parse("package:" + packageName));
          startActivity(intent);
      }
      

    注意:这个权限需要向用户说明合理的使用理由,否则容易被拒绝,且Google Play审核时也会重点关注这类权限的使用场景。

  • 检查扫描回调的异常情况
    有时候扫描停止并非系统限制导致,而是回调本身出现了问题。建议在ScanCallback的onScanFailed()方法中捕获错误码,比如SCAN_FAILED_ALREADY_STARTED、SCAN_FAILED_APPLICATION_REGISTRATION_FAILED等,这些错误码能帮你排查更深层的问题。

内容的提问来源于stack exchange,提问作者Uf.Oe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:29:14