【问题标题】:How do I get the all time data from Google Fit API?如何从 Google Fit API 获取所有时间数据?
【发布时间】:2016-04-11 09:55:00
【问题描述】:

我需要获取用户从开始使用该应用到今天所走过的步数。如何使用 Google FIT api 执行此操作?

【问题讨论】:

    标签: google-fit google-fit-sdk


    【解决方案1】:

    您可以使用Fitness History API,让您的应用在健身商店中执行批量操作,例如读取、插入、更新和删除健身数据。

    您需要创建一个DataReadRequest 实例来从健身历史记录中读取数据。

    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();
    
    java.text.DateFormat dateFormat = DateFormat.getDateInstance();
    Log.e("History", "Range Start: " + dateFormat.format(startTime));
    Log.e("History", "Range End: " + dateFormat.format(endTime));
    
    //Check how many steps were walked and recorded in the last 7 days
    DataReadRequest readRequest = new DataReadRequest.Builder()
            .aggregate(DataType.TYPE_STEP_COUNT_DELTA, DataType.AGGREGATE_STEP_COUNT_DELTA)
            .bucketByTime(1, TimeUnit.DAYS)
            .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
            .build();
    

    您还可以将这些数据按时间或会话分组到Bucket 对象中。在此示例中,您请求上周的汇总步骤数据并按天存储该数据。

    Calendar cal = Calendar.getInstance();
    Date now = new Date();
    cal.setTime(now);
    long endTime = cal.getTimeInMillis();
    cal.add(Calendar.HOUR_OF_DAY, -1);
    long startTime = cal.getTimeInMillis();
    
    DataSource dataSource = new DataSource.Builder()
        .setAppPackageName(this)
        .setDataType(DataType.TYPE_STEP_COUNT_DELTA)
        .setName("Step Count")
        .setType(DataSource.TYPE_RAW)
        .build();
    
    int stepCountDelta = 1000000;
    DataSet dataSet = DataSet.create(dataSource);
    
    DataPoint point = dataSet.createDataPoint()
            .setTimeInterval(startTime, endTime, TimeUnit.MILLISECONDS);
    point.getValue(Field.FIELD_STEPS).setInt(stepCountDelta);
    dataSet.add(point);
    

    来自 tutorial 的这个示例使用聚合数据点,其中每个 DataPoint 代表一天步行的步数。

    检查这个相关的问题:

    【讨论】:

    • 现在如果想获取用户开始使用应用程序以来的数据,到今天,startTime 和 endTime 是多少?我应该使用什么分桶策略?
    • 我的问题是如何找出从用户安装应用程序到现在为止的步数。你的回答完全无关紧要。
    • 根据我的示例,您可以使用DataReadRequest 检查步行和记录的步数。创建DataReadRequest 后,您可以使用Fitness.HistoryApi.readData 命令从GoogleApiClient 请求数据,如here 所述。如果调用成功返回,您可以从DataReadResult 对象访问用户的健身数据。
    • @abielita 你能帮我看看 Google Fit 中的睡眠数据吗?这是我的问题:stackoverflow.com/q/43780050/7382665
    【解决方案2】:

    我自己也有过这个问题。我所做的是构建一个 DataRequest :

    现在结束时间(今天):

    Calendar cal = Calendar.getInstance();
    Date now = new Date();
    cal.setTime(now);
    long endTime = cal.getTimeInMillis();
    

    以及第一版 Google fit 应用发布的开始时间:

    cal.set(2014, 9, 28);
    cal.set(Calendar.HOUR_OF_DAY, 0); //so it get all day and not the current hour
    cal.set(Calendar.MINUTE, 0); //so it get all day and not the current minute
    long startTime = cal.getTimeInMillis();
    

    DataReadRequest 构建:(您可以根据需要存储桶)

            DataReadRequest readRequest =  new DataReadRequest.Builder()
                    .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
                    .read(DataType.AGGREGATE_STEP_COUNT_DELTA)
                    .enableServerQueries()
                    .build();
    

    这样您就可以得到从 2014 年 10 月 28 日开始的所有数据

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      相关资源
      最近更新 更多