【问题标题】:Android Wear: CapabilityApi times out, doesn't return capabilitiesAndroid Wear:CapabilityApi 超时,不返回功能
【发布时间】:2015-07-09 21:58:12
【问题描述】:

我正在尝试使用 play services 7.3 中引入的新 CapabilityApi 来了解我的 android 穿戴设备(Asus Zenwatch)的功能。我已经检查了this question 并且可以确认 Wearable.NodeApi.getConnectedNodes(...) 方法确实可以获取连接节点的列表,并且我确实在列表中看到了手表。这是我在手机应用程序中运行的代码,用于查询连接的穿戴设备的功能:

GoogleApiClient mGoogleApiClient = new GoogleApiClient.Builder(context)
                .addApi(Wearable.API)
                .build();

PendingResult<CapabilityApi.GetAllCapabilitiesResult> result = 
    Wearable.CapabilityApi.getAllCapabilities(mGoogleApiClient, CapabilityApi.FILTER_ALL);

Map<String, CapabilityInfo> capabilities = result.await().getAllCapabilities();

context 在这种情况下是一个活动。此调用发生在非 ui 线程上,因此调用 await() 是安全的。我在最后一行插入了一个断点,但是当我点击它并跳过它时,调试器永远不会返回,就好像该方法永远运行并且永远不会返回一样。如果我将 await() 替换为 await(10000, TimeUnit.MILLISECONDS),那么它会在 10 秒后超时,并且将 capabilities 分配为 null .在与 android wear 配对、未配对或在模拟器上的手机上的行为是相同的。

我错过了什么吗?使用 CapabilityApi 并获取可用功能列表且不会超时的正确方法是什么?

编辑 1:

在@ianhanniballake 的帮助下,我想出了这段代码,它不会挂起,但会很快返回结果:

ConnectionResult connectionResult = mGoogleApiClient.blockingConnect(CONNECTION_TIME_OUT_MS, TimeUnit.MILLISECONDS);
if (connectionResult.isSuccess()) {
    PendingResult<CapabilityApi.GetAllCapabilitiesResult> result =
                    Wearable.CapabilityApi.getAllCapabilities(mGoogleApiClient, CapabilityApi.FILTER_ALL);
    mGoogleApiClient.disconnect();
    Map<String, CapabilityInfo> capabilities =
                    result.await().getAllCapabilities();
    return capabilities != null && !capabilities.isEmpty();
} else {
    mGoogleApiClient.disconnect();
    return false;
}

但是,当我在与 Android 智能手表配对的手机上运行此代码时,capabilities 最终会显示为空列表或 null。这是预期的结果吗?我以为我应该得到一份智能手表功能的清单。或者这段代码应该在手表本身上运行?

【问题讨论】:

    标签: android google-play-services wear-os


    【解决方案1】:

    您必须连接您的GoogleApiClient。考虑在后台线程上使用blockingConnect(),然后检查生成的ConnectionResult 以确保连接成功。

    【讨论】:

    • 嘿,谢谢你的回答,它确实有效!但我有一个后续问题,在与 Android 穿戴设备配对的手机上,功能最终仍为 null 或空列表。我更新了问题。
    • 我认为您误解了 Capabilities Api:这些是由您的应用程序定义的功能,可让您区分节点。查看 sending messages training 以获取使用 API 的示例。
    • 啊,我明白了,我怀疑我误解了这个概念。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 2016-10-30
    • 1970-01-01
    • 1970-01-01
    • 2017-05-06
    相关资源
    最近更新 更多