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

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还是返回空节点列表呢?会不会是我在配置或者调用逻辑里漏了什么细节?麻烦各位帮忙看看,谢谢啦!

火山引擎 最新活动