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

索尼Xperia XZ2 Compact上CompanionDeviceManager按服务UUID过滤无设备

解决CompanionDeviceManager按蓝牙服务UUID过滤无设备显示的问题

可能原因及修复方案

1. 目标设备未主动广播电池服务UUID

多数蓝牙设备默认不会主动广播所有支持的GATT服务UUID,电池服务(0000180F-0000-1000-8000-00805f9b34fb)这类服务通常仅在建立连接后才会暴露。而CompanionDeviceManager的过滤逻辑完全依赖设备主动广播的UUID,所以即便设备支持该服务,未广播的话也无法被匹配到。

你可以用蓝牙调试工具扫描目标设备,确认其广播包中是否包含该电池服务UUID。如果没有,要么修改外设的广播设置(若为自研设备),要么更换设备已主动广播的UUID进行过滤。

2. Android 10定制系统的兼容性问题

索尼Xperia XZ2 Compact搭载的Android 10定制系统,可能对CompanionDeviceManager的UUID过滤逻辑存在实现差异。可以尝试两种调整:

  • 使用addServiceUuid的重载方法,传入第二个参数(服务名称):
    .addServiceUuid(ParcelUuid(UUID.fromString("0000180F-0000-1000-8000-00805f9b34fb")), "Battery Service")
    
  • 先通过空过滤获取所有设备,再手动筛选:
    1. 用空BluetoothDeviceFilter调用associate,获取所有可见设备
    2. 在CompanionDeviceManager.Callback的onDeviceFound回调中,对每个设备发起GATT连接,查询其支持的服务列表
    3. 仅保留包含电池服务UUID的设备供用户选择

3. 权限配置不完整

确保应用已声明并获取必要权限:

  • Android 10需要BLUETOOTH、BLUETOOTH_ADMIN和ACCESS_FINE_LOCATION权限(位置权限是蓝牙扫描的强制前提)
  • 除了在Manifest中声明权限,还需在运行时主动请求ACCESS_FINE_LOCATION,否则扫描会返回空结果

4. 蓝牙扫描模式限制

检查测试设备的蓝牙扫描模式是否为SCAN_MODE_CONNECTABLE_DISCOVERABLE或SCAN_MODE_CONNECTABLE,部分设备在特定状态下会限制扫描范围。可以通过代码临时触发传统扫描辅助验证:

val bluetoothAdapter = BluetoothAdapter.getDefaultAdapter()
bluetoothAdapter?.startDiscovery()

注:startDiscovery是传统蓝牙扫描,和CompanionDeviceManager的扫描逻辑不同,但可用于确认目标设备是否能被正常检测到。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 03:51:13