Wearable.getCapabilityClient查询能力始终返回null问题求助
我之前在开发Wear应用时也碰到过一模一样的情况,给你分享几个我当时排查解决的方向,应该能帮到你:
先确认wear.xml的内容是否规范
别光看路径对不对,还要检查里面的格式是不是正确。正确的capability声明应该是这样的:<resources> <string-array name="android_wear_capabilities"> <item>你的自定义Capability名称</item> </string-array> </resources>特别注意:代码里调用的Capability名称要和这里的完全一致,大小写敏感,差一个字母都不行。
穿戴端也得配置对应的wear.xml
很多人会忽略这点——移动端配置了还不够,穿戴设备的项目里同样需要在Res -> Values路径下创建wear.xml,并且声明完全相同的Capability。因为Capability是两端互相识别的,少了一端的配置,系统就检测不到。检查Data Layer的连接状态
在调用Wearable.getCapabilityClient之前,一定要确保Data Layer已经成功建立连接。你可以通过Wearable.getDataClient(context).getConnectedNodes()来获取当前连接的节点,如果返回的节点列表为空,说明连接有问题,这时候Capability客户端自然会返回null。清理项目缓存再重建
有时候Android Studio的缓存会搞鬼,导致资源文件没有被正确编译。试试执行Build -> Clean Project,然后再Build -> Rebuild Project,甚至重启一下IDE,说不定就能解决。验证依赖和权限配置
两端的build.gradle里都要添加正确的Wear依赖:implementation "com.google.android.gms:play-services-wearable:18.0.0"同时,AndroidManifest.xml里要确保声明了必要的权限:
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION" />换成真机测试试试
模拟器有时候会出现连接不稳定的情况,如果你一直用模拟器测试,不妨换成配对好的真机,确保手机和穿戴设备登录了同一个Google账号,并且蓝牙连接正常。
内容的提问来源于stack exchange,提问作者eternal_atom

