2017-10-02 18 views
9

어떻게 든 Google Fit Android SDK로 막 다른 골목에 처했습니다. 현재 Google 피트니스의 데이터를 읽고 표시하고 처리하는 애플리케이션을 구축하여 사용자에게 운동 행동에 대한 통찰력을 제공합니다.Google 맞춤 세션 시간 범위의 모든 세션을 반환하지 않는 Api

내 상황은 다음과 같습니다. Google Pixel에서 테스트했는데 모든 것이 좋았으며 Google 피트니스에서 20 개가 넘는 세션을 모두 받았습니다. 일주일 전, HTC10으로 전환했습니다.이 기기에서 Google 피트니스에서받은 세션 수는 4 회 (!)입니다. 동일한 앱, 동일한 코드, 동일한 Google 피트니스 계정 (Google 피트니스 앱에서 여전히 볼 수 있습니다. 모든 운동 및 세션). 내가 읽으려는 세션은 내 앱으로 제작 된 것이 아니라 Google Fit 앱 자체로 만들었습니다. 그러나 아직도, 오래된 전화에서 나는 그것을 읽을 수 있었다, 내가 할 수없는 새로운 것에 그것을 읽을 수 있었다.

더 명확하게하기 위해 일부 코드를 붙여 넣으십시오.

GoogleApiClient 설정

googleApiClient = GoogleApiClient.Builder(context) 
    .addApi(Fitness.HISTORY_API) 
    .addApi(Fitness.SESSIONS_API) 
    .addApi(Fitness.RECORDING_API) 
    .addApi(Fitness.GOALS_API) 
    .addScope(Scope(Scopes.FITNESS_ACTIVITY_READ_WRITE)) 
    .addScope(Scope(Scopes.FITNESS_BODY_READ_WRITE)) 

연결 한 후, 나는

SessionReadRequest (TYPE_CALORIES_EXPENDED, TYPE_WORKOUT_EXERCISE, TYPE_WEIGHT) 여러 RecordingApis에 가입 :

val sessionRequest = SessionReadRequest.Builder() 
       .setTimeInterval(startTime, endTime, TimeUnit.MILLISECONDS) 
       .read(DataType.TYPE_WORKOUT_EXERCISE) 
       .readSessionsFromAllApps() 
       .enableServerQueries() 
       .build() 

읽기 세션 :

 Fitness.SessionsApi.readSession(googleApiClient, sessionRequest) 
     .setResultCallback { result -> 
      Timber.d("Sessions result: %s", result.status) 
       Timber.d("Got %d sessions", result.sessions.size) // returns only 4! for 2014-NOW timerange 
     } 

도움이 될 것입니다.

+0

Google Pixel 및 HTC 옆에있는 다른 기기의 동작은 무엇입니까? – AADProgramming

+0

어쨌든 두 장치에서 데이터의 일관성이 유지되기를 기대하기 때문에 아직 세 번째 장치에서 테스트하지 않았습니다. – damian

답변

0

Google 적합 API는 로컬 캐시에서만 데이터를 반환하며 요청한 날짜와 Google Fit 앱에서 사용할 수있는 데이터 사이에 데이터를 반환합니다.

+0

이것이 enableServerQueries()의 목적입니다. 이제는 로컬 캐시뿐 아니라 데이터도 사용합니다 Google Fit API에서 가져 왔습니다. – damian