我试图在Play服务7.3中引入新的CapabilityApi以了解我的Android Wear设备(Asus Zenwatch)的功能。我已经检出this question,并且可以确认Wearable.NodeApi.getConnectedNodes(...)方法确实可以获取连接节点的列表,并且可以看到列表中的手表。这是我在一个应用程序运行在手机上查询连接磨损设备的功能代码:在这种情况下Android Wear:CapabilityApi超时,不返回能力
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();
方面是一种活动。这个调用发生在非ui线程上,所以调用await()是安全的。我在最后一行插入了一个断点,但是当我点击并跳过它时,调试器从不返回,就好像该方法永远运行并且永不返回。如果我替换等待()与等待(10000,TimeUnit.MILLISECONDS),那么它在10秒后才会超时并且功能被指定为空。在配戴Android系统的手机上,或者不配对,或者在模拟器上,行为是一样的。
我错过了什么吗?使用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智能手表配对的手机上的代码,功能最终为空列表或空。这是预期的结果吗?我以为我应该得到我的智能手表功能的清单。或者这个代码应该在手表上运行?
嘿,谢谢你的回答,它确实有效!但是我有一个后续问题,功能仍然是空的,或者是与Android Wear设备配对的手机上的空列表。我更新了这个问题。 –
我认为你误解了Capa的功能Api:这些是你的应用定义的*功能,允许你区分节点。查看[发送消息培训](http://developer.android.com/training/wearables/data-layer/messages.html)了解使用API的示例。 – ianhanniballake
啊,我明白了,我怀疑我误解了这个概念。谢谢! –