我试图通过将开始时间和结束时间传递给 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 等所有权限。
任何帮助,将不胜感激。