-
Android Location ManagerAndroid/LBS 2019. 7. 26. 16:06
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
- 군사목적으로 이용하던 것을 민간으로 풀어서 GPS가 사용되었다.
- 최소한의 정확한 GPS 좌표는 3개의 위성이 필요Network Provider 이동통신사 망 정보를 이용하여 위치 정보 흭득
오차 범위 : 1km ~ 1.5km
- 대략적인 위치는 파악 가능하나 길 안내로는 사용이 불가능하다.
- 아직까지는 IPv4 체제 ( 디바이스가 연결 될때 마다 달라 진다. )Wifi Provider 와이파이의 AP 정보를 이용하여 위치 정보 흭득
오차 범위 : 1m ~ 5m
- 우리나라에서는 제공되지 않는다. ( 남이 설치해놓은 와이파이를 수집해 가는것은 불법 )
- Google Contents
- Beacon : BluetoothPassive 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를 껐다가 켰다 하면 위와 같이 실행이 되고 제가 실내에서 테스트 해서 그렇지 외부에서 테스트 시 다른 리스너도 동작을 잘 할 것입니다.
'Android > LBS' 카테고리의 다른 글
Marker로 지도에 표시를 해보자 (0) 2019.07.29 Geocoder 도분초를 주소로, 주소를 도분초로! (0) 2019.07.29 Android Google Map 등록하기 ( API Key ) (0) 2019.07.29 Android Google Map 구현하기 (0) 2019.07.26 Android Fused Location (0) 2019.07.26