CapabilityApi不返回任何节点

时间:2015-11-17 11:22:55

标签: java android wear-os

我正在尝试在掌上电脑和可穿戴应用之间进行通信,我正在尝试使用var items = $(this).parent().siblings().find('.year-dropdown').find('.date, .time, .details').not('.clone').addClass('clone').clone(); var final = '<div class="new">'; $(items).each(function(i,v){ final+=v; if (i%4 == 0 ) { final+='</div><div class="new">' } }); final+='</div>'; $(final).appendTo('#all-events'); 找到正确的Node。我知道设备已连接 - 其他应用和示例工作正常 - 但是当我运行我的可穿戴应用时,既不会致电CapabilityApi,也不会getCapability()返回任何getAllCapabilities()

其他一切似乎都能正常工作 - 事实上,如果我使用Nodes并且使用NodeApi发送消息似乎也能正常工作 - 我可以找到手持设备就好了因某些原因,设备不会被广告。我已在res / values文件夹中正确设置了wear.xml,并确保两个应用程序在build.gradle中设置了相同的applicationId。

我的可穿戴应用中对MessageApi的调用如下所示:

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()

为了记录,我的掌上电脑app的wear.xml看起来像这样:

List<Node>

我已经梳理了我的代码库,寻找错误,但我找不到它。没有任何意义,因为没有宣传这些功能。

3 个答案:

答案 0 :(得分:6)

简答:

对手持设备和可穿戴应用使用相同的调试证书,否则CapabilityApi无法正常工作。

长答案:

错误结果非常简单!修复它只需要编辑build.gradle中的signingConfig。

我使用通用调试证书来签署掌上电脑应用的调试版本:

signingConfigs {
    debug {
        storeFile file("debug.jks")
        storePassword ...
        keyAlias ...
        keyPassword ...
    }
}

buildTypes {
    debug {
        signingConfig signingConfigs.debug
    }
    release {
        ...
    }
}

但是我的可穿戴应用程序没有使用相同的调试证书,它显然使用了我的IDE提供的默认调试证书。似乎当手持和可穿戴应用程序没有使用相同的证书时 - 即使它只是一个调试版本 - 那么另一个应用程序无法找到设备的功能。实际上这很有意义,是什么让整个事情变得混乱,其他一切看起来都很好,因此很难找到像这样的问题。

在我的情况下,我从掌上电脑app的build.gradle中删除了常见的调试歌曲配置,CapabilityApi立即开始工作。我认为为可穿戴设备和掌上电脑应用程序设置相同的debug signingConfig也可以解决问题,但我现在还没有测试过。

答案 1 :(得分:1)

检查是否:

  • 两个模块的build.gradle中的ApplicationId是相同的
  • 两个模块的包名称相同

答案 2 :(得分:0)

如果您在任何一侧都有两种构建类型(发布和调试),请添加另一种。就像我在移动端有两种构建类型:

//Mobile side
    buildTypes {
            release {
     signingConfig signingConfigs.release
    }
     debug {
                applicationIdSuffix = ".debug" // just add debug build type to your watch build.gradle file as well
    }
    }

所以我添加了

//wear side
     debug {
                    applicationIdSuffix = ".debug"
        }

但是不要忘记两边的applicationidsuffix应该是一样的