我正试图在我的手持和可穿戴应用程序之间进行通信,我正试图通过使用Node
找到正确的CapabilityApi
。我知道设备已连接-其他应用程序和示例工作正常-但当我运行可穿戴应用程序时,对getCapability()
或getAllCapabilities()
的调用都不会返回任何Nodes
。
其他一切似乎都正常工作-事实上,如果我使用NodeApi
并且用MessageApi
发送消息似乎也正常工作,我可以很好地找到手持设备-但是由于某种原因,每个设备的功能都没有公布。我已经在res/values文件夹中正确设置了wear.xml,并确保两个应用程序在build.gradle中设置了相同的applicationid。
在我的可穿戴应用程序中对CapabilityApi
的调用如下所示:
Wearable.CapabilityApi.getCapability(mGoogleApiClient, SOME_CAPABILITY, CapabilityApi.FILTER_REACHABLE)
.setResultCallback(new ResultCallback<CapabilityApi.GetCapabilityResult>() {
@Override
public void onResult(CapabilityApi.GetCapabilityResult result) {
if (!result.getStatus().isSuccess()) {
return;
}
final CapabilityInfo info = result.getCapability();
updateCapabilities(info);
}
});
但是
Set<Node>
实例中的CapabilityInfo
总是空的!同时使用Wearable.CapabilityApi.getAllCapabilities()
总是返回一个空的List<Node>
!另外,我的手持应用程序的wear.xml如下所示:
<resources>
<string-array name="android_wear_capabilities">
<item>some_capability</item>
</string-array>
</resources>
我已经搜索了我的代码库,寻找一个错误,但我就是找不到它。为什么不宣传这些功能是毫无意义的。
最佳答案
简短回答:
对手持和可穿戴应用程序使用相同的调试证书,否则CapabilityApi
将不起作用。
长回答:
结果错误很简单!修复它只需要编辑build.gradle中的signingconfig。
我使用了一个通用的调试证书来签名我的手持应用程序的调试版本:
signingConfigs {
debug {
storeFile file("debug.jks")
storePassword ...
keyAlias ...
keyPassword ...
}
}
buildTypes {
debug {
signingConfig signingConfigs.debug
}
release {
...
}
}
但我的可穿戴应用程序并没有使用相同的调试证书,它显然使用了我的ide提供的默认调试证书。似乎当手持和可穿戴应用程序不使用同一个证书时(即使只是一个调试版本),另一个设备找不到设备的功能。实际上,这很有意义,让这件事令人困惑的是,其他一切似乎都工作得很好,因此确定这样的问题是困难的。
在我的例子中,我从我的手持应用程序的build.gradle中删除了常见的调试唱歌配置,
CapabilityApi
立即开始工作。我认为为可穿戴和手持应用程序设置相同的debug signingconfig也可以解决这个问题,但我现在没有测试。