Android Location Manager
LBS는 Location Based Service의 약자다
기본적인 모바일 디바이스에 위치를 흭득 할때에는 위, 경도를 사용해서 계산한다
이러한 LBS 프로그래밍을 위한 라이브러리는 아래와 같다
1. 표준 Library "Location Manager" ( 1 -> 28 ) System Service가 제공한다.
2. Fused Location API
3. Map
딱 무엇을 선택해야 한다는 표준 라이브러리는 없다. 어떤 벤더의 지도를 사용할껀지 개발자가 선택 하여야 한다.
위 경도 계산은 기본적으로 위/경도는 도/분/초/로 표시되는데 일반적인 시스템에서는 실수로 사용한다.
* 위도 : 90 ~ 0 ~ -90 ( 0 : 적도 )
* 경도 : 180 ~ 0 ~ -180 ( 0 : 그리니치 천문대 )
소숫점 6자리 이하의 데이터는 필요가 없다.
Creteria 를 이용하여서 정확도가 높은 걸 이용하여서 GPS Network 둘중 알맞은거를 판단하여서 출력을 한다.
1. LocationManager
LocationProvider에는 아래와 같은 종류가 있다.
GPS Provider |
GPS 위성을 이용하여 위치 정보 흭득 오차 범위 : 10m ~ 15m |
Network Provider |
이동통신사 망 정보를 이용하여 위치 정보 흭득 오차 범위 : 1km ~ 1.5km |
Wifi Provider |
와이파이의 AP 정보를 이용하여 위치 정보 흭득 오차 범위 : 1m ~ 5m |
Passive Provider | 다른 앱에서 이용한 마지막 위치 정보 흭득 |
위치 정보 제공자 정보 흭득은 아래와 같이 한다
val locationManager = getSystemService(Context.LOCATION_SERVICE) as LocationManager
val providers = locationManager.allProviders
// 스마트폰에서 제공하는 모든 위치 정보 제공자
val enabledProviders = locationManager.getProviders(true)
// 사용 가능한 위치 정보 제공자
val location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER)
// 위치 흭득 ( 펄미션 필요 )
// android menifest
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
LocationListener
val locationManager = getSystemService(Context.LOCATION_SERVICE) as LocationManager
val listener = object : LocationListener {
override fun onLocationChanged(location: Location?) {
"onLocationChanged".log()
}
override fun onStatusChanged(provider: String?, status: Int, extras: Bundle?) {
"onStatusChanged".log()
}
override fun onProviderEnabled(provider: String?) {
"onProviderEnabled".log()
}
override fun onProviderDisabled(provider: String?) {
"onProviderDisabled".log()
}
}
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000L, 10.0F, listener)
GPS를 사용하기 위해서는 Permission 권한이 필요합니다.
마시멜로우 부터는 매니페스트에 올려 놓아도 한번더 받아야 하니..
저는 TedPermission으로 구현하였습니다.
D: onProviderDisabled
D: onProviderEnabled
D: onProviderDisabled
D: onProviderEnabled
GPS를 껐다가 켰다 하면 위와 같이 실행이 되고 제가 실내에서 테스트 해서 그렇지 외부에서 테스트 시 다른 리스너도 동작을 잘 할 것입니다.