ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Android]CurrentLocationRequest가 뭘까?
    안드로이드/정리 2023. 3. 22. 02:16

     

    안드로이드에서 위치정보를 사용하려고 할 때 주로 FusedLocationProviderClient를 사용한다.
    위치정보의 정확성은 필요하지만 지속적으로 필요하진 않았기에 getLastLocation이나 requestLocationUpdates을 사용하지 않고,
    getCurrentLocation을 사용하려 했다.

    ❓이 때 해당 메소드의 매개변수에서 의문이 생겼다.

     

    해당 메소드의 매개변수는 다음과 같은데

    먼저 첫 번째 메소드의 첫 번째 매개변수의 Int는 위치정보를 어떤점에 우선순위를 두고 가져올 것인지 정하는 Priority이다.

    이미지클릭시 해당 페이지 이동
    이미지클릭시 해당 페이지 이동

     

    문제는 오버로딩한 그 다음 메소드의 매개변수이다.
    CurrentLocationRequest라는 클래스를 필요로 하는데 검색해도 쉽게 나오지 않아서 그냥 공식문서를 찾아보게 됐다.

    간단한 요약은 다음과 같다.

    이미지클릭시 해당 페이지 이동

    Builder 패턴을 사용하면서 getCurrentLocationRequest를 위한 값들을 넘겨주기 위한 클래스이다.

    처음에 보고 느낀점은
    "왜 굳이 단 하나의 메소드만을 위해서 클래스를 만들었지...?"였다 ㅎㅎ
    각설하고

    Builder의 내부 메소드들을 보면 다음과 같다.

    이미지클릭시 해당 페이지 이동

     

    build를 제외한 나머지 메소드들은 다음과 같다

    • setDurationMillis(long durationMillis)"이전 위치 정보가 현재 위치 요청을 충족시키지 못할 경우 현재 위치를 유도하는 데 사용되는 위치 요청의 기간을 밀리초 단위로 설정합니다."
      getCurrentLocation은 위치를 캐싱하는데, 캐싱된 위치를 사용하지 않고 새로 위치정보를 요청할 때의 최대 요청시간을 정하는 메소드이다
    • setGranularity(int granularity)"이 요청에 대해 반환되는 위치의 정확도를 설정합니다."
      위치 권한과 관련해서 정확도를 설정할 수 있다.
      GRANULARITY_COARSE,GRANULARITY_FINE,GRANULARITY_PERMISSION_LEVEL로 나뉘는데 현재 권한에 따라서 위치정보의 정확도를 어떻게 할 것인지 정할 수 있다.(자세한내용은 링크)
    • setMaxUpdateAgeMillis(long maxUpdateAgeMillis)"이 요청에 대해 반환되는 위치의 최대 연령을 설정합니다."
      번역만 보면 조금 이상한데, 위치를 캐싱하는 시간을 정할 수 있다.
      기본 값은 1분이니 매 번 실시간 위치를 가져오고 싶으면 0으로 설정해주면 된다.
    • setPriority(int priority)
      "이전 위치 정보가 현재 위치 요청을 충족시키지 못할 경우 현재 위치를 유도하는 데 사용되는 위치 요청의 우선순위를 설정합니다."
      캐싱된 위치를 가져오는 것이 아닌 새로 위치정보를 생성할 때 어떤 기준으로 할 것인지 정하는 속성이다.
      글 중간의 설명 참조

     

     

    예를 들어 사용한다면 다음과 같은 코드로 작성 할 수 있을 거 같다.

    private fun createCurrentLocationRequest(): CurrentLocationRequest = 
        CurrentLocationRequest.Builder()
            .setDurationMillis(3000)
            .setGranularity(Granularity.GRANULARITY_FINE)
            .setMaxUpdateAgeMillis(1000)
            .setPriority(Priority.PRIORITY_HIGH_ACCURACY)
            .build()

     

     

    생각보다 꽤 파악하기 어려웠다.

    getCurrentLocation을 사용하는 글은 몇 개 없을뿐더러 그 세부 속성, 메소드를 설명하는 글은 더군다나 없었기에😂
    하나의 메소드의 하나의 매개변수를 위한 클래스...
    이해는 안가지만 구글이 만든거니까 이유가 있겠지!

Designed by Tistory.