我正试图在我的手持和可穿戴应用程序之间进行通信,我正试图通过使用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也可以解决这个问题,但我现在没有测试。

09-04 10:32