Я разрабатываю фитнес-приложение, которое использует носимые устройства для выполнения сеансов во время записи частоты пульса и расстояния. Затем эти сеансы (месяц назад) читаются на смартфоне с помощью SessionReadRequest. Вначале проблем не было, но метод readSession неожиданно отказывается возвращать какие-либо сессии.
Когда я изменяю SessionReadRequest с 1 месяца на действительно низкое число, например 3 дня, оно работает. Это также работает, когда я удаляю типы данных из SessionReadRequest. Тем не менее, я хотел бы показывать пользователям ежемесячные данные на вкладке истории моего приложения. Может ли кто-нибудь помочь мне с этим вопросом. Есть ли какие-то ограничения на SessionReadRequest? Ниже мой код для чтения сессий. После прочтения сеанса он попадает в список populateList, где они добавляются в список, и после завершения уведомляет RecyclerView.
private Task<SessionReadResponse> readSession() {
// Begin by creating the query.
SessionReadRequest readRequest = readFitnessSession();
// [START read_session]
// Invoke the Sessions API to fetch the session with the query and wait for the result
// of the read request. Note: Fitness.SessionsApi.readSession() requires the
// ACCESS_FINE_LOCATION permission.
return Fitness.getSessionsClient(this, GoogleSignIn.getLastSignedInAccount(this))
.readSession(readRequest)
.addOnSuccessListener(new OnSuccessListener<SessionReadResponse>() {
@Override
public void onSuccess(SessionReadResponse sessionReadResponse) {
// Get a list of the sessions that match the criteria to check the result.
Log.i(TAG, "Session read was successful");
populateList(sessionReadResponse);
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.i(TAG, "Failed to read session");
}
});
// [END read_session]
}
private SessionReadRequest readFitnessSession() {
// [START build_read_session_request]
// Set a start and end time for query, using a start time of 1 month before this moment.
Calendar cal = Calendar.getInstance();
Date now = new Date();
cal.setTime(now);
long endTime = cal.getTimeInMillis();
cal.add(Calendar.DAY_OF_YEAR, -2);
long startTime = cal.getTimeInMillis();
// Build a session read request
SessionReadRequest readRequest = new SessionReadRequest.Builder()
.setTimeInterval(startTime, endTime, TimeUnit.MILLISECONDS)
.read(DataType.TYPE_HEART_RATE_BPM)
.read(DataType.AGGREGATE_DISTANCE_DELTA)
.readSessionsFromAllApps()
//.enableServerQueries()
.build();
// [END build_read_session_request]
return readRequest;
}