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

通过Google Fit API从配对Wear OS手表获取心率的问题排查

解决Google Fit API获取Wear OS手表心率数据的两个常见问题

我来帮你排查这两个Wear OS和Google Fit联动时的典型问题,都是实际开发中容易踩的坑:


问题1:手机端无法检测到配对手表的心率数据源

可能原因

  • 手表端的Google Fit未完成账号同步或权限授予
  • 数据源过滤条件太严格(比如仅指定TYPE_RAW)
  • 手机与手表的Google账号不一致

解决方案

  1. 基础检查

    • 确认手表和手机使用同一个Google账号,手表上已安装并登录Google Fit应用,且在手表设置中给Google Fit开启了心率传感器权限
    • 打开手机端Google Fit,确认能看到手表同步的心率数据,再尝试调用API扫描数据源
  2. 调整数据源请求参数
    去掉过于严格的TYPE_RAW过滤,同时添加手表设备类型筛选,代码修改如下:

    DataSourcesRequest dataSourceRequest = new DataSourcesRequest.Builder()
        .setDataTypes(DataType.TYPE_HEART_RATE_BPM)
        .addDataSourceFilter(DataSource.TYPE_RAW, DataSource.TYPE_DERIVED) // 同时兼容原始和计算后的数据
        .addDataSourceFilter(Device.TYPE_WATCH) // 只筛选手表设备
        .build();
    
  3. 确保授权流程完整
    手机端调用API前,必须完成Google Sign-In的授权流程,在onConnectionFailed中处理SIGN_IN_REQUIRED的情况,引导用户授权FITNESS_SCOPE_BODY_READ权限。


问题2:Wear OS手表端连接Fitness API触发错误码5(INVALID_ACCOUNT)

可能原因

  • 旧版GoogleApiClient未指定明确的Google账号
  • 手表未登录默认Google账号,或账号未同步到Google Play服务

解决方案

  1. 指定明确的账号构建客户端
    在构建GoogleApiClient时添加setAccountName,指定手表当前登录的Google账号邮箱:

    mFitnessClient = new GoogleApiClient.Builder(this)
        .addApi(Fitness.SENSORS_API)
        .addScope(Fitness.SCOPE_BODY_READ)
        .setAccountName("your-google-account@example.com") // 替换为手表的实际账号
        .addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() {
            @Override
            public void onConnected(Bundle bundle) {
                Log.d(LOG_TAG, "Connected to fitness API");
            }
            @Override
            public void onConnectionSuspended(int i) {}
        })
        .addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() {
            @Override
            public void onConnectionFailed(ConnectionResult connectionResult) {
                Log.d(LOG_TAG, "Connection failed: " + connectionResult.getErrorCode());
            }
        })
        .build();
    
  2. 自动获取手表默认账号
    如果不想硬编码账号,可以通过AccountManager获取手表的默认Google账号:

    AccountManager accountManager = AccountManager.get(this);
    Account[] googleAccounts = accountManager.getAccountsByType("com.google");
    if (googleAccounts.length > 0) {
        String defaultAccount = googleAccounts[0].name;
        // 使用defaultAccount构建GoogleApiClient
    }
    
  3. 升级到新版Fitness API
    旧版GoogleApiClient已被弃用,推荐使用新版的Google Fit Client API,更稳定且账号处理更简洁:

    // 新版API示例:获取账号并扫描数据源
    GoogleSignInAccount signedInAccount = GoogleSignIn.getLastSignedInAccount(this);
    Fitness.getSensorsClient(this, signedInAccount)
        .findDataSources(
            new DataSourcesRequest.Builder()
                .setDataTypes(DataType.TYPE_HEART_RATE_BPM)
                .build())
        .addOnSuccessListener(dataSourcesResult -> {
            // 遍历处理找到的数据源
            for (DataSource dataSource : dataSourcesResult.getDataSources()) {
                Log.d(LOG_TAG, "找到数据源: " + dataSource.getName());
            }
        })
        .addOnFailureListener(e -> {
            Log.e(LOG_TAG, "扫描数据源失败: ", e);
        });
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:36:15