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

Google Fit全量活动获取及用户添加活动实时通知技术咨询

Google Fit 相关问题解答

我来帮你逐个解决这些Google Fit开发中的问题:

1. 能否在用户向Google Fit添加活动时立即获取相关信息?

当然可以!你可以通过Google Fit的Recording API实现实时数据监听。具体来说,调用Fitness.RecordingApi.subscribe()方法订阅你关注的数据类型(比如活动会话、速度、步数等),当用户在Google Fit中添加新活动时,你的应用会收到数据更新通知。

另外,还可以配合PendingIntent设置回调:当有新数据产生时,系统会触发你指定的PendingIntent(比如启动后台Service或BroadcastReceiver),这样就能及时捕获新添加的活动信息。注意要确保应用已获取对应权限(比如ACCESS_FINE_LOCATION、FITNESS_ACTIVITY_READ等),且用户已授权应用访问Google Fit数据。

2. 如何获取某时段内的全部活动?是否需要构建正式发布版应用?

你的现有代码只返回本应用创建的会话,问题出在这行代码:

.setSessionName(SAMPLE_SESSION_NAME)

这行限制了查询范围为指定名称的会话,且默认情况下,Google Fit的会话查询只会返回当前应用创建的数据。要获取某时段内所有应用创建的活动会话,需要做两个修改:

  • 移除setSessionName(SAMPLE_SESSION_NAME),不限制会话名称
  • 在SessionReadRequest.Builder中添加readSessionsFromAllApps(),明确要求读取所有应用的会话

修改后的代码示例:

private SessionReadRequest readFitnessSession() {
    Calendar cal = Calendar.getInstance();
    Date now = new Date();
    cal.setTime(now);
    long endTime = cal.getTimeInMillis();
    cal.add(Calendar.WEEK_OF_YEAR, -1);
    long startTime = cal.getTimeInMillis();
    // Build a session read request
    SessionReadRequest readRequest = new SessionReadRequest.Builder()
        .setTimeInterval(startTime, endTime, TimeUnit.MILLISECONDS)
        .read(DataType.TYPE_SPEED)
        .readSessionsFromAllApps() // 关键:读取所有应用的会话
        .build();
    return readRequest;
}

关于是否需要正式发布版应用:不需要。测试版应用只要完成Google Fit授权流程,且用户授予应用读取所有Fit数据的权限,就能访问其他应用创建的活动数据。

3. 当用户向Google Fit添加活动时,是否有事件监听器或intent可用?

有的,主要有两种实用方式:

  • Recording API订阅机制:如第一个问题所说,通过Fitness.RecordingApi.subscribe()订阅数据类型并传入PendingIntent。当用户添加新活动时,Google Fit会触发这个PendingIntent,你可以在对应组件(比如Service)中处理新数据。
  • ContentObserver监听内容URI:Google Fit提供内容提供者,你可以注册ContentObserver监听com.google.android.gms.fitness相关的内容URI变化。不过这种方式不如官方API稳定,推荐优先使用Recording API的订阅方案。

举个简单的PendingIntent示例:

Intent intent = new Intent(this, YourDataUpdateService.class);
PendingIntent pendingIntent = PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

// 订阅活动会话数据
Fitness.RecordingApi.subscribe(mGoogleApiClient, DataType.TYPE_SESSION)
    .setResultCallback(new ResultCallback<Status>() {
        @Override
        public void onResult(Status status) {
            if (status.isSuccess()) {
                // 订阅成功
            }
        }
    });

当有新的活动会话添加时,YourDataUpdateService会被启动,你可以在服务中查询新的活动数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:27:32