磨损能力客户端节点不在“附近”

问题描述 投票:0回答:1

我有一段时间没有在这里发帖了。请原谅我这么晚了还不清楚。

情况

我想听穿戴设备发出的

capabilityClient
声,以了解手持设备何时离线(提醒您忘记携带手机,以供练习)。到目前为止,我的尝试失败了,因此我正在扭转工作流程(从手持设备监听佩戴情况)以简化。

我有一台实体 Pixel 6(手机)和一台实体 Fossil Carlyle HR(手表)。它们是配对的,我几乎每天都使用它们。它们都连接到 ADB,我可以使用 Android Studio 中的 Logcat 监控它们的日志。

问题

我有一个在本地运行的 DataLayer Sample 项目 的稍微修改过的版本。我首先尝试为功能更改设置监听器,但当我的设备离线时我从未收到任何回调。

我转而只寻找节点,以验证是否可以找到。有时,当我查询可到达的节点时,它会返回配对的设备。有时则不然。

我查询节点的问题似乎与配对设备“在附近”有关,但我不确定。

代码

在 MainActivity.kt 中,我有一个触发 queryNodes() 的按钮:

MainActivity.kt
// Sorry for the gratuitous logging and control statements.
// I've been learning Kotlin as I go, and I forgot the value of the debugger.
...
    private fun queryNodes() {
        Log.d(TAG, "Node Query clicked")
        lifecycleScope.launch {
            try {
                val nodes = getReachableNodes()
                    .filterValues { MOBILE_CAPABILITY in it }.keys
                Log.d(TAG, "Nodes: " + nodes.toString())
            } catch (cancellationException: CancellationException) {
                throw cancellationException
            } catch (exception: Exception) {
                Log.d(TAG, "Querying nodes failed: $exception")
            }
        }
    }
...
    private suspend fun getReachableNodes(): Map<Node, Set<String>> =
        capabilityClient.getAllCapabilities(CapabilityClient.FILTER_REACHABLE)
            .await()
            // Pair the list of all reachable nodes with their capabilities
            .flatMap { (capability, capabilityInfo) ->
                Log.d(TAG, "flat mapping " + capability.toString())
                capabilityInfo.nodes.map { it to capability }
            }
            // Group the pairs by the nodes
            .groupBy(
                keySelector = { it.first },
                valueTransform = { it.second }
            )
            // Transform the capability list for each node into a set
            .mapValues { it.value.toSet() }
...

此设置返回空节点列表。

当我将过滤器更改为

FILTER_ALL
时,我能够恢复节点。通过调试器,我发现节点的
isNearby
属性是
false
。我想这就是它无法“可达”的原因。

问题

我该怎么做才能使这些节点可达?这和“附近”有什么关系吗?

我是否用这个

CapabilityClient
找错了树并监听功能变化?

android wear-os
1个回答
0
投票

请参阅下图,来自连接指南:

Watch 1
Phone
Watch 2
从彼此的角度来看都是可达节点。

Phone
Watch 1
彼此邻近


我该怎么做才能使这些节点可达?

节点必须连接(在线)并配对:“此 API 仅在 Wear OS 手表和配对的 Android 设备上可用”。

这和“附近”有什么关系吗?

不。根据上面的示例,可以从

Watch 2
Phone
到达
Watch 1
,但
Watch 2
不在它们附近。

我想从穿戴设备上监听capabilityClient,以了解手持设备何时离线(提醒您忘记手机,以供练习)。

我是否用这个 CapabilityClient 找错了树并监听功能更改?

也许吧。

  • FILTER_ALL 将返回所有 节点,即使这些节点不在线(无法访问),但我没有找到一种方法来识别其中哪个节点离线。
  • FILTER_REACHABLE 将仅返回在线(可到达)节点。

看起来一种方法是进行两次单独的调用,每个调用都有不同的过滤器,然后减去结果以找出离线的结果。

我建议您在 问题跟踪器 中提出功能请求,解释您的用例。

© www.soinside.com 2019 - 2024. All rights reserved.