코틀린 프로젝트로 안드로이드에서 smartlocation 사용해보기

오늘은 코틀린 안드로이드로 사용자의 위치를 경도와 위도로 나타내주는 라이브러리를 사용해보려 합니다.

smartlocation라고 불리는 라이브러리를 사용하면 간단히 사용자의 기기에 있는 gps로 위치정보를 받아올 수 있습니다.

의존성

    implementation 'io.nlopez.smartlocation:library:3.3.3'
    implementation "com.google.android.gms:play-services-location:16.0.0"

app.gradle 파일에 위와 같이 smartlocation 라이브러리와 위치 관련 구글 플레이 서비스를 같이 넣어줍니다.

권한

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

manifest에 해당 권한을 추가해줍니다.

만약 안드로이드 6.0이상이라면 따로 권한을 요청하는 작업이 필요합니다.

해당 작업은 이전에 작성한 권한에 대한 포스팅을 참고하시면 됩니다.

GPS 시작

override fun onResume() {
    val provider: LocationGooglePlayServicesProvider? = LocationGooglePlayServicesProvider()
    provider?.setCheckLocationSettings(true)
    val smartLocation = SmartLocation.Builder(this).logging(true).build()
    smartLocation.location(provider).start(this)
    smartLocation.activity().start(this)
    val lastLocation = SmartLocation.with(this).location().lastLocation
    if (lastLocation != null) {
        toast(lastLocation.latitude.toString() + " " + lastLocation.longitude.toString())
    }
}

LocationGooglePlayServicesProvider 타입의 provider 객체를 만들고, 이 객체에서 설정을 확인하도록 참으로 변경합니다.

smartLocation라고 객체를 만들고 위치 서비스를 켜줍니다.

마지막으로 해당 엑티비티의 생명주기가 Resume 상태일 때에 이 위치 서비스에서 내려오는 경도와 위도를 토스트로 출력합니다.

GPS 중단

override fun onStop() {
    super.onStop()
    SmartLocation.with(this).location().stop()
    SmartLocation.with(this).activity().stop()
    SmartLocation.with(this).geofencing().stop()
}

앱이 꺼지기 전에 이전에 켜둔 서비스들을 멈춰주어야 앱을 빌드했을 때에 오류가 발생하지 않습니다.

Written on October 11, 2018