Wear OS 6/Android 16环境下CapabilityClient.getCapability返回空节点列表问题求助
Wear OS 6/Android 16环境下CapabilityClient.getCapability返回空节点列表问题求助
大家好,我最近在开发跨手机和Wear OS的功能时遇到了个卡壳的问题,折腾了真机和各种模拟器组合都没解决,想过来请教一下各位。
问题背景
我在Pixel 6(Android 16)和配对的三星Galaxy Watch 6(Wear OS 6)上都装了对应的手机端、穿戴端App,两个App都在运行,测试时Wear端App还特意保持在前台状态。但出现了奇怪的现象:
- 调用
nodeClient.connectedNodes能精准返回已连接的手表节点 - 调用
capabilityClient.getCapability却始终返回空的节点列表
相关代码与配置
1. 仓库实现代码(WearDevicesRepositoryImpl)
internal class WearDevicesRepositoryImpl @Inject constructor( private val nodeClient: NodeClient, private val capabilityClient: CapabilityClient, @DispatcherIO private val ioDispatcher: CoroutineDispatcher, ) : WearDevicesRepository { override fun getConnectedNodes(): Flow<List<Node>> { return typedFlow { // 这里能正确返回已连接的手表 nodeClient.connectedNodes.await() }.flowOn(ioDispatcher) } override fun getCapableNodes(): Flow<List<Node>> { return typedFlow { // 这里始终返回空列表 val capabilityInfo = capabilityClient.getCapability( CAPABILITY_NAME, CapabilityClient.FILTER_REACHABLE ).await() capabilityInfo.nodes.toList() }.flowOn(ioDispatcher) } private companion object { private const val CAPABILITY_NAME = "watchface_installer" } }
2. Wear端Capability配置文件(wear/src/main/res/xml/wear_capabilities.xml)
<?xml version="1.0" encoding="utf-8"?> <capabilities xmlns:android="http://schemas.android.com/apk/res/android"> <capability android:name="watchface_installer" /> </capabilities>
3. Wear端AndroidManifest.xml配置片段
<manifest xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 其他权限、基础配置已省略 --> <application> <!-- 其他Application配置已省略 --> <service android:name=".ui.DataLayerReceiverService" android:exported="true"> <intent-filter> <action android:name="com.google.android.gms.wearable.CHANNEL_EVENT" /> <data android:scheme="wear" android:host="*" android:pathPrefix="/watchface/install" /> </intent-filter> </service> <meta-data android:name="com.google.android.wearable.capability" android:resource="@xml/wear_capabilities" /> </application> </manifest>
4. 移动端build.gradle.kts的Wear依赖配置
dependencies { // 其他依赖已省略 wearApp(project(":wear")) }
我的疑问
明明NodeClient已经能识别到已连接的穿戴设备,Wear端也按要求声明了对应的Capability,为什么capabilityClient.getCapability还是返回空节点列表呢?会不会是我在配置或者调用逻辑里漏了什么细节?麻烦各位帮忙看看,谢谢啦!




