마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

구글 api 포인트 질문

0 추천
 val dataSets = response.getDataSet(session)
            for (dataSet in dataSets)

코틀린에서 자바로 변환중인데

point와 dataPoints 어떻게 정의해야하는지 문의드립니다!

https://developers.google.com/fit/scenarios/read-sleep-data?hl=ko

enerigpy (2,110 포인트) 님이 2023년 2월 9일 질문

2개의 답변

+1 추천
 
채택된 답변
그건 API 문서를 참고하시면 됩니다.

https://developers.google.com/android/reference/com/google/android/gms/fitness/data/DataPoint.Builder#setTimeInterval(long,%20long,%20java.util.concurrent.TimeUnit)

 

startTime The start time in the given unit, representing elapsed time since epoch.

endTime The end time in the given unit, representing elapsed time since epoch.

 

epoch은 컴퓨터에서 날짜를 계산하기 위한 기준점으로 보면 되는데, 운영체제에 따라 다를 수 있으며, Linux/Unix에서는 1970년 1월 1일을 기준으로 합니다. 안드로이드도 Linux 기반이죠.

"elapsed time since epoch"을 구하는 방법은

Calendar.getTimeInMillis()
Date.getTime()

등을 사용하시면 됩니다. 위의 값들을 millisecond 단위로 리턴됩니다.
spark (224,800 포인트) 님이 2023년 2월 10일 답변
enerigpy님이 2023년 2월 10일 채택됨
네 감사합니다. 혹시
https://www.masterqna.com/android/101782/google-fit-sleep-data-oauth-%EA%B4%80%EB%A0%A8-%EB%AC%B8%EC%9D%98?show=101782#q101782
이거 보시면 수면 시간과 끝나는 시간은 어떻게 저장해서 읽어야 할까요?
Fitness.getSessionsClient(this, GoogleSignIn.getAccountForExtension(this, fitnessOptions))
                .readSession(readRequest)
                .addOnSuccessListener(response -> {
                    // Get a list of the sessions that match the criteria to check the result
                            List<Session> sessions = response.getSessions();
                            Log.i(TAG, "Number of returned sessions is: ${sessions.size}");
                            for (Session session : sessions) {
                                // Process the data sets for this session
                                List<DataSet> dataSets = response.getDataSet(session);

                                for (DataSet dataSet : dataSets) {
                                    long segmentStart = point.getStartTime(TimeUnit.MILLISECONDS);
                                    long segmentEnd = point.getEndTime(TimeUnit.MILLISECONDS);
                                }
                            }
                })
                .addOnFailureListener(e ->
                        Log.w(TAG,"Failed to read session", e));

이런식으로 하나의 상태만 보려고 datapoints가 아닌 단일 point로 했는데 맞을까요?
제가 WearOS는 사용해 보지 않아서 해당 데이터처럼 처리하는게 맞는지는 모르겠네요.
wear가 아니고 휴대폰으로 하는거에요!
네.이 질문은 googlefit api를 사용해보지 않아서 답을 드릴 수가 없네요.
0 추천

링크에 나온 코드대로 하시면 될 것 같은데요. 문제가 되는 부분이 뭔가요?

val dataSets = response.getDataSet(session)
for (dataSet in dataSets) {
      for (point in dataSet.dataPoints) {
            val sleepStageVal = point.getValue(Field.FIELD_SLEEP_SEGMENT_TYPE).asInt()
            val sleepStage = SLEEP_STAGE_NAMES[sleepStageVal]            
            val segmentStart = point.getStartTime(TimeUnit.MILLISECONDS)
            val segmentEnd = point.getEndTime(TimeUnit.MILLISECONDS)
            Log.i(TAG, "\t* Type $sleepStage between $segmentStart and $segmentEnd")
      }
}

 

spark (224,800 포인트) 님이 2023년 2월 10일 답변
val dataPoints = listOf(
    DataPoint.builder(dataSource)
        .setTimeInterval(startTime1, endTime1, TimeUnit.MILLISECONDS)
        .setField(Field.FIELD_SLEEP_SEGMENT_TYPE, SleepStages.SLEEP_LIGHT)
        .build(),
    DataPoint.builder(dataSource)
        .setTimeInterval(startTime2, endTime2, TimeUnit.MILLISECONDS)
        .setField(Field.FIELD_SLEEP_SEGMENT_TYPE, SleepStages.SLEEP_DEEP)
        .build(),
    DataPoint.builder(dataSource)
        .setTimeInterval(startTime3, endTime3, TimeUnit.MILLISECONDS)
        .setField(Field.FIELD_SLEEP_SEGMENT_TYPE, SleepStages.SLEEP_LIGHT)
        .build(),
    DataPoint.builder(dataSource)
        .setTimeInterval(startTime4, endTime4, TimeUnit.MILLISECONDS)
        .setField(Field.FIELD_SLEEP_SEGMENT_TYPE, SleepStages.SLEEP_REM)
        .build(),
    DataPoint.builder(dataSource)
        .setTimeInterval(startTime5, endTime5, TimeUnit.MILLISECONDS)
        .setField(Field.FIELD_SLEEP_SEGMENT_TYPE, SleepStages.AWAKE)
        .build(),
    DataPoint.builder(dataSource)
        .setTimeInterval(startTime6, endTime6, TimeUnit.MILLISECONDS)
        .setField(Field.FIELD_SLEEP_SEGMENT_TYPE, SleepStages.SLEEP_LIGHT)
        .build()
)

여기있는 time들을 뭐로 정의해야할지 아실까요? time1은 달력시간 가져오는거로 아는데

https://developers.google.com/fit/scenarios/write-sleep-data?hl=ko
...