💻 개발/TIL

[TIL] 22.03.14

고도고도 2022. 3. 14. 19:20

공부한 것

안드로이드 강의 수강

  1. 카카오톡, 공공데이터 API
  2. Retrofit, OkHttpLoggingInterceptor
  3. FusedLocationProvider
  4. Coroutine
  5. AppWidgetProvider
  6. Service Lifecycle

알게된 것

1. FusedLocationProvider

안드로이드에서 위치 정보를 받아올 수 있는 방법에는 LocationManagerFusedLocationProvider 가 있다. 우선 LocationManagergetLastKnownLocation 또는 LocationListener 를 통해서 위치 정보를 가져올 수 있다.

// LocationManager 를 정의한다.
val locationManager = getSystemService(LOCATION_SERVICE) as LocationManager

// 어떤 방식으로 위치 정보를 가져올지를 정한다.
// getLastKnownLocation 은 호출된 경우에만 GPS 정보를 가져온다.
val currentLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER)

// 정해진 시간마다 위치 정보를 가져와야 할 경우 LocationListener 를 사용한다.
val locationListener = object : LocationListener {
    override fun onStatusChanged(provider: String?, status: Int, extras: Bundle?) {
        super.onStatusChanged(provider, status, extras)
        // provider 의 상태가 변경될때마다 호출
    }

    override fun onLocationChanged(location: Location) {
        // 위치가 변경되는 경우에 호출
    }

    override fun onProviderEnabled(provider: String) {
        super.onProviderEnabled(provider)
        // provider 를 사용할 수 있는 상황에 호출
    }

    override fun onProviderDisabled(provider: String) {
        super.onProviderDisabled(provider)
        // 사용자가 GPS를 끈 경우와 같이 provider 를 사용할 수 없는 상황에 호출
    }
}

// 매개변수로 위치 정보 제공자, LocationListener 호출 주기, 변경 위치 거리의 정보, LocationListener 를 넣어준다.
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 100000, 100.0f, locationListener)

FusedLocationProvider 는 아래와 같은 이유들로 사용이 권장되고 있다.

여기에는 두 개의 차이점에 대해 정리가 되어 있다.

2. http 처리

안드로이드에서 https 가 아닌 http 를 처리하기 위해선 별도의 코드가 필요하다. Manifest 에서 <Application> 에 아래 코드를 추가하면 된다.

android:usesCleartextTraffic="true"

3. 애니메이션 처리

화면 전환 시에 뭔가 탁! 하고 바로 전환되는 것보다 스르륵~ 하고 전환되는게 조금 느낌이 있다. 이 때 animate 를 사용한다. 우선 애니메이션을 사용할 레이아웃의 alpha 를 0으로 지정하고 전환 시에 1로 변경해주면 끝이다. 오늘 작업했던 코드의 일부분을 가져와봤다.

private fun displayAirQualityData(
        monitoringStation: MonitoringStation,
        measuredValue: MeasuredValue
    ) = with(binding) {
            contentLayout.animate()
                .alpha(1F)
                .start()

            measuringStationNameTextView.text = monitoringStation.stationName
            measuringStationAddressTextView.text = monitoringStation.addr
}

이렇게 사용하면 끝이다. alpha 를 변경하고 start 를 호출한다.

4. 상태바 제거

상태바에 있는 기본적인 컬러를 제거하고 싶다면 theme.xml 을 살짝 손봐주면 된다. 기존 흰색 or 검은색의 칙칙한 상태바가 사라지고 내 앱의 레이아웃에 맞게 컬러가 변경되는 것을 볼 수 있다. 하지만 상태바 크기만큼 전체적으로 위로 이동하기 때문에 MarginTop 을 줘야 한다.

<item name="android:windowTranslucentStatus">true</item>

공부할 것

내일은 진짜 진짜 코루틴 공부

느낀 점

지금까지 위치 정보를 받아올 때 LocationManagerLocationListener 를 통해서 위치 정보를 받아왔는데 이번에 클론 코딩을 하면서 FusedLocationProvider 를 알게 됐다. 구현 자체도 훨씬 간결하고 퍼포먼스 측면에서도 훨씬 좋기 때문에 앞으로 LocationManager 보단 FusedLocationProvider 를 사용하려고 한다. 실제로 구글에서도 FusedLocationProvider 사용을 권장하고 있다. 앞으로 어플리케이션 제작에 있어서 위치 정보는 상당히 중요하고 자주 사용될 것이므로 이에 대해 주말에 정리해보려고 한다.

그리고 몸조리 잘하자.

'💻 개발 > TIL' 카테고리의 다른 글

[TIL] 22.03.17  (0) 2022.03.17
[TIL] 22.03.16  (0) 2022.03.16
[TIL] 22.03.15  (0) 2022.03.15
[TIL] 22.03.14  (0) 2022.03.14
[TIL] 22.03.13  (0) 2022.03.13
[TIL] 22.03.10  (0) 2022.03.10