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

同型号手机APP蓝牙扫描异常:部分设备无法发现蓝牙设备

蓝牙扫描异常排查:新部署设备无法在APP中发现蓝牙设备

问题背景

  • 同型号智能手机,5台旧设备长期用于应用测试开发,闲置新设备部署同款APP后,无法在APP内搜索到目标蓝牙设备;旧设备可正常工作
  • 两类设备OS版本、应用权限、网络配置完全一致,且通过系统自带蓝牙菜单均能搜索到目标设备
  • 旧设备恢复出厂设置并重装APP后,蓝牙扫描功能仍正常;新设备日志显示扫描到蓝牙数据,但未将目标设备加入APP的设备列表

日志对比

新设备异常日志

2024-05-02 14:00:38.037 22371-22398 BtGatt.GattService      com.android.bluetooth                V  Skipping data matching denylist: ScanRecord [mAdvertiseFlags=-1, mServiceUuids=null, mServiceSolicitationUuids=[], mManufacturerSpecificData={76=[2, 21, 80, 118, 92, -73, -39, -22, 78, 33, -103, -92, -6, -121, -106, 19, -92, -110, 106, 94, 35, 4, -50]}, mServiceData={}, mTxPowerLevel=-2147483648, mDeviceName=null]
2024-05-02 14:00:38.037 22371-22398 BtGatt.GattService      com.android.bluetooth                I  Skipping client for location deny list

旧设备正常日志

2024-05-02 13:29:54.868 18185-18185 ScanDeviceCtrl          com.example.app2         I  onScanResult: ScanRecord [mAdvertiseFlags=6, mServiceUuids=[d1560100-32d8-ee21-19a8-7439819a87a6], mServiceSolicitationUuids=[], mManufacturerSpecificData={1565=[33, -68, -127, -115, -31, -10, 26, -35, 0]}, mServiceData={}, mTxPowerLevel=-2147483648, mDeviceName=A8D81]

2024-05-02 13:29:54.868 18185-18185 ScanDeviceCtrl          com.example.app2         I  DeviceName: A8D81

2024-05-02 13:29:54.868 18185-18185 ScanDeviceCtrl          com.example.app2         I  ServiceData: {}

2024-05-02 13:29:54.868 18185-18185 ScanDeviceCtrl          com.example.app2         I  Battery Level: 2880 mV

核心分析

新设备日志中的**Skipping data matching denylist和Skipping client for location deny list是关键线索:蓝牙扫描结果被系统层面的拒绝列表(denylist)**拦截,且拦截规则与位置权限关联。

排查与解决方案

  • 检查系统蓝牙扫描过滤设置:部分厂商定制系统(如小米、华为)自带蓝牙扫描过滤/隐私保护功能,默认拦截未匹配规则的设备。进入「设置-蓝牙-高级设置」,关闭扫描过滤规则,或添加目标设备的Service UUID(d1560100-32d8-ee21-19a8-7439819a87a6)、厂商ID到白名单。
  • 确认位置权限的实际生效状态:即使权限显示已开启,部分设备对新安装APP的位置权限有额外限制。进入「设置-应用-目标APP-权限-位置信息」,确保开启**「始终允许」**权限,而非仅「使用中允许」。
  • 验证APP扫描逻辑:对比日志可知,旧设备扫描到的目标设备带有特定Service UUID,而新设备日志中显示的是厂商ID为76(苹果设备)的无关设备。需确认APP扫描代码是否正确设置了目标Service UUID的过滤规则,示例代码如下:
    BluetoothLeScanner scanner = BluetoothAdapter.getDefaultAdapter().getBluetoothLeScanner();
    List<ScanFilter> filters = new ArrayList<>();
    ParcelUuid targetUuid = ParcelUuid.fromString("d1560100-32d8-ee21-19a8-7439819a87a6");
    ScanFilter filter = new ScanFilter.Builder().setServiceUuid(targetUuid).build();
    filters.add(filter);
    ScanSettings settings = new ScanSettings.Builder().build();
    scanner.startScan(filters, settings, scanCallback);
    
    同时确认目标蓝牙设备在新设备的信号覆盖范围内,排除信号干扰问题。
  • 重置蓝牙系统配置:进入「设置-系统-重置-重置蓝牙设置」,清除所有蓝牙配对记录与配置,重启蓝牙后重新测试APP扫描功能。
  • 检查系统补丁差异:同型号设备可能存在不同的系统补丁版本,即使OS版本一致,蓝牙相关补丁也可能有区别。进入「设置-关于手机-系统更新」,安装新设备的所有可用系统补丁后再测试。

内容的提问来源于stack exchange,提问作者koralræv

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 17:05:11