안드로이드/basic
Android GPS Tutorial
개발혱
2021. 2. 20. 19:40
Android GPS
- Google Play 서비스 Location API를 사용하여 앱에서 마지막으로 알려진 사용자 기기의 위치를 요청할 수 있습니다. 대부분의 경우 사용자의 현재 위치에 관심이 있고 사용자의 현재 위치는 일반적으로 마지막으로 알려진 기기의 위치와 같습니다.
- 통합 위치 정보 제공자는 Google Play 서비스의 Location API중 하나입니다. 기본 위치 기술을 관리하고 단순한 API를 제공하므로, 높은 수준으로 요구사항(높은 정확성이나 저전력 등)을 지정할 수 있습니다.
GPS 사용 순서
- 앱의 위치 정보 접근 권한 부여
- 안드로이드 기기의 위치 서비스 활성화
- 위치 서비스를 사용하여 현재 위치 획득
AndroidManifest.xml
<!--GPS정보를 이용해서 정확한 정보를 얻어 오기 위한 정보(정확한 정보 얻기 용이, gps사용하는 동안 전력소모 크다, 지하에 있거나 실내에 있을 경우 안 잡히거나 오차범위가 클 수 있다. Network_Provider와 GPS_PROVIDER 모두 사용하는 경우 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!--모바일 기지국을 이용해서 데이터 가져오는 것. 실내, 지하에 상관없이 어느 정도 위치를 파악 가능.-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
백그라운드 위치(항상 허용)
- 앱 내 기능이 지속적으로 다른 사용자와 위치를 공유
런타임 시 위치 정보 액세스 권한 요청(앱 사용중에만 허용)
- 앱이 켜져 있을 때만 사용 가능.
권한 확인 API
- 위치 요청 설정
- 업데이트간격-setInterval()
- 가장 빠른 업데이트 간격-setFastestInteval()
- 우선순위
- PRIORITY_BALANCED_POWER_ACCURACY
- 저전력, Wi-Fi와 휴대폰 기지국 위치를 사용
- PRIORITY_HIGH_ACCURACY
- 가장 정확한 위치를 요청, GPS를 사용하여 위치를 확인할 가능성(자전거 트레킹과 같이 정확한 트레킹이 필요할 때)
- PRIORITY_LOW_POWER
- 도시 수준의 정밀도를 요청, 10킬로미터의 정확성, 전력 더 적게 소비 가능
- PRIORITY_NO_POWER
- 위치 업데이트를 수신하려면 이 설정을 사용
- PRIORITY_BALANCED_POWER_ACCURACY
fun createLocationRequest() {
val locationRequest = LocationRequest.create()?.apply {
interval = 10000
fastestInterval = 5000
priority = LocationRequest.PRIORITY_HIGH_ACCURACY
}
}
- 현재 위치 설정 받기
val builder = LocationSettingsRequest.Builder()
.addLocationRequest(locationRequest)
// ...
val client: SettingsClient = LocationServices.getSettingsClient(this)
val task: Task<LocationSettingsResponse> = client.checkLocationSettings(builder.build())
위치권한 소스
위치 서비스 클라이언트 만들기
private lateinit var fusedLocationClient: FusedLocationProviderClient
override fun onCreate(savedInstanceState: Bundle?) {
// ...
fusedLocationClient = LocationServices.getFusedLocationProviderClient(this)
}
마지막으로 알려진 위치 가져오기
fusedLocationClient.lastLocation
.addOnSuccessListener { location : Location? ->
// Got last known location. In some rare situations this can be null.
}
fusedLocationClient.lastLocation .addOnSuccessListener { location : Location? -> // Got last known location. In some rare situations this can be null. }
- getLastLocation() 메서드에서 위치 객체가 null일 경우,
- 기기 설정에서 위치 사용을 중지하면 캐시도 지워지고 마지막 위치도 null 반환
- 기기에서 위치를 기록한 적이 없는 경우, 새기기 이거나 기본 설정으로 복원된 기능인 경우
- 기기의 서비스가 다시 시작 되었으며, 서비스가 다시 시작된 후 위치를 요청한 활성 통합 위치 정보 제공자 클라이언트 없는 경우