You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android手持设备连接智能手表时Wearable.API不可用错误求助

解决Wearable API不可用(ApiException: 17)问题

错误原因

错误码17明确表示Wearable API在当前设备上无法使用,核心原因通常和Google Play服务状态、项目依赖配置、设备兼容性有关。

逐一排查解决方案

1. 确保Google Play服务正常且版本达标

  • 手机和Wear OS手表都必须安装并更新到最新版Google Play服务
  • 路径:设置 → 应用 → Google Play服务,检查版本并更新;国内设备需确保能正常访问Google服务框架

2. 核对项目依赖与清单配置

  • 添加正确的Wear DataLayer依赖到app/build.gradle:
    dependencies {
        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.WEARABLE_DATA_SYNC" />
    
    <application ...>
        <!-- 标记是否为独立Wear应用:手机端设为false,手表端设为true -->
        <meta-data
            android:name="com.google.android.wearable.standalone"
            android:value="false" />
    </application>
    

3. 替换阻塞式调用为异步回调

你的代码使用Tasks.await()在主线程阻塞,既容易引发ANR,也可能导致API调用时机异常,改用异步回调:

private void fetchConnectedNodes() {
    Wearable.getNodeClient(this).getConnectedNodes()
        .addOnSuccessListener(nodes -> {
            HashSet<String> nodeIds = new HashSet<>();
            for (Node node : nodes) {
                nodeIds.add(node.getId());
            }
            // 在这里处理获取到的节点ID列表,比如发送数据
        })
        .addOnFailureListener(exception -> {
            Log.e(TAG, "获取连接节点失败: " + exception.getMessage());
        });
}

4. 验证设备连接与兼容性

  • 确保手机与手表已通过蓝牙完成配对,手机端Wear OS应用正常运行
  • 优先使用物理设备测试,模拟器常存在Google Play服务缺失、连接不稳定的问题

5. 确认API调用时机

避免在Application初始化阶段或onCreate()之前调用Wearable API,建议在onStart()或之后的生命周期方法中触发节点获取逻辑


内容的提问来源于stack exchange,提问作者Mirou

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 14:15:36