Android에서 위치 정보 얻기(Android10 지원)

6770 단어 Androidlocation

동기


백스테이지에서 위치 정보를 얻어야 하기 때문에 키타의 기사를 찾아보는 것은 낡은 것이다.
거의공식 가이드를 참고했지만 분산되어 이해하기 어려운 부분도 있어 사용 상황에 따라 정리했다.

Case1. 지도에만 표시


위치 정보를 사용하는 응용 프로그램은 대부분 이 용례가 아닐까.
이 경우Maps SDK for Android를 사용하는 것이 좋습니다.현재 소재지는 SDK 측에서 준비한 것으로 SDK 측에서 위치 정보를 얻고 업데이트하기 때문에 저는 현재 소재지를 얻지 못할 것이라고 생각합니다.
그러나 현재 소재지의 위치정보 데이터(위도경도정보)를 이용하기 위해서는 다음과 같이 위치정보를 스스로 얻어야 한다.
맵스 SDK도 현재 위치 가져오기 방법 있지만 depricated이고 뒤로 안내되는 방법입니다.

Case2. 현재 위치 정보 활용


Google Play services location API.
Android 프레임워크의 위치 관리자를 사용하는 방법도 있지만 지금은 추천하지 않습니다.FusedLocationProviderClientlastLocation에서 최신 위치 정보를 얻을 수 있지만 낡은 일이 있기 때문에 스스로 갱신하여 얻어야 한다.(터미널을 다시 시작할 때null로 돌아갑니다.)
거의공식 가이드에 의하면, 다음은 현지를 간단하게 갱신하여 얻는 방법입니다.

1. 위치 정보 업데이트 요청


업데이트 빈도와 정밀도를 설정합니다.배터리 소비와 관련이 있기 때문에 응용 프로그램에 따라 조정하는 곳이라고 생각합니다.
val locationRequest = LocationRequest.create()
        .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
        .setInterval(LOCATION_REQUEST_INTERVAL)

2. 위치 정보 업데이트에 대한 콜백 생성


이 콜백을 사용하여 현재 위치Location를 가져옵니다.
val locationCallback = object : LocationCallback() {
        override fun onLocationResult(locationResult: LocationResult?) {
            locationResult ?: return
            location = locationResult.lastLocation
        }
    }

3. 현재 위치의 업데이트 정보 요청

FusedLocationProviderClient에 상기 정의된 요청과 리셋을 전달하고 위치 정보 업데이트를 요청합니다.
fun startLocationUpdates() {
    // 定期的な位置情報の更新をリクエストする.
    fusedLocationClient.requestLocationUpdates(locationRequest, locationCallback, null)
}

Case3. 백그라운드 위치 정보 얻기


응용 프로그램을 사용하는 과정에서 사용자는 홈 버튼을 누르거나 응용 프로그램이 테이블에 없는 경우도 있다.
주의해야 할 것은android8 이상이면 받아들인다배경 위치 정보 제한.
사용자가 앱을 조작하는 동안에만 위치 정보가 있으면 좋고, 위치 정보의 취득 자체가 지연될 수 있는 유형의 앱을 만들면 별로 신경 쓰지 않아도 되지만, 사용자가 앱을 조작하지 않은 상황에서도 정기적으로 위치 정보를 찾아야 하는 프로그램도 있다.
나비아 플리와 추적계의 응용 프로그램이 바로 이거죠.
위치 정보가 업데이트됩니다.

[중요] android10, ACCESS_BACKGROUND_위치 요청 안 해도 돼요.


android10부터 더욱 엄격해졌고, 백그라운드에서 위치 정보를 얻을 때 필요하다고 한다フォアグラウンドサービス.사용자가 이 권한을 허용하지 않고 백그라운드에서 위치 정보를 가져오면 알림이 표시됩니다.
여기, ACCESS_BACKGROUND_나는 네가 위치를 가지고 싶을 것 같지만 추천하지 않는다.
자주 위치 정보를 얻으려면 ACCESS_BACKGROUND_LOCATION 를 사용하십시오.선언에서 지정됩니다 フォアグラウンドサービス.→ 인용하다

총결산


자신이 위치 정보를 어떻게 사용하는지는 사용 상황을 고려하는 것이 중요하다.
  • 지도에 현재 위치 보이기 → 맵 sdk만으로 충분
  • api 등으로부터 위치정보(lat,long)와 일치하는 데이터 취득→fusedLocation
  • 추적 등 응용 프로그램이 뒷면에 갈 때도 자주 위치 정보→프론트 데스크 서비스
  • 참고 자료

  • Location and context overview
  • 정기적으로 현지 업데이트 정보를 받다
  • 예를 들어 사용자의 소재지에 따라 서버에 문의합니다. 
    공식에 근거하다 프론트 데스크톱 서비스는 응용 프로그램이 반드시 표에 있어야 한다는 것이 아니라 알림을 보내야 하고 사용자가 식별할 수 있기 때문에 프론트 데스크톱의 뜻인 것 같다. 
    android10이 발표된 후 백그라운드에서 위치 정보를 얻는 프로그램이 모두 이 알림에 노출되었다. 
    백그라운드 서비스에서 위치 정보를 어떻게든 사용하고 싶다면 사용자에게 요청할 수 있다android:foregroundServiceType="location".그러나 사용자가 닫을 수 있다는 메시지가 표시됩니다.위치 정보를 얻는 데 짧은 시간 안에라도 프론트 데스크 서비스에서 시작해야 한다. 

    좋은 웹페이지 즐겨찾기