3

我试图通过将开始时间和结束时间传递给 google FIT android API 来获取用户的历史距离数据。

在检查了堆栈溢出中可用的所有相关文章后,我发布了此查询。

/**
 * Returns a {@link DataReadRequest}.
 */
public DataReadRequest queryFitnessStepData(String startTime, String endTime) {
    long startVal = convertDateStringtoEpoch(startTime, true);
    long endVal = convertDateStringtoEpoch(endTime, false);

    DataSource datasource = new DataSource.Builder()
            .setAppPackageName("com.google.android.gms")
            .setDataType(DataType.TYPE_STEP_COUNT_DELTA)
            .setType(DataSource.TYPE_DERIVED)
            .setStreamName("distance_delta")
            .build();

    return new DataReadRequest.Builder()
            .aggregate(datasource)
            .bucketByTime(1, TimeUnit.DAYS)
            .setTimeRange(startVal, endVal, TimeUnit.MILLISECONDS)
            .build();
}

private void readHistoryDistanceData(String strDate, String endDate) {
readRequest = queryFitnessStepData(strDate, endDate);

FitnessOptions fitnessOptions =
            FitnessOptions.builder()
                    .addDataType(DataType.TYPE_DISTANCE_DELTA, FitnessOptions.ACCESS_READ)
                    .addDataType(DataType.AGGREGATE_DISTANCE_DELTA, FitnessOptions.ACCESS_READ)
                    .build();

    if (GoogleSignIn.hasPermissions(GoogleSignIn.getLastSignedInAccount(requireActivity()), fitnessOptions)) {
        Fitness.getHistoryClient(requireActivity(), Objects.requireNonNull(GoogleSignIn.getLastSignedInAccount(requireActivity())))
                .readData(readRequest)
                .addOnSuccessListener(
                        new OnSuccessListener<DataReadResponse>() {
                            @Override
                            public void onSuccess(DataReadResponse dataReadResponse){ 
                                  //parse data
                                }
                              }
                          }
                     }

但是,在运行此代码时,我无法获得与用户距离相关的任何数据。我拥有 ACCESS_FINE_LOCATION 和 ACTIVITY_RECOGNITION 等所有权限。

任何帮助,将不胜感激。

4

0 回答 0