본문 바로가기
안드로이드 코드

안드로이드 백그라운드에서 계속 위치 받아오기

by 우딬 2021. 4. 7.

1. 백그라운드에서 위치를 받아오는 이유

 

배달어플에서 중요한 기능 중 하나는 관리자가 라이더 위치를 관제하는 것이다.

관제라는게 나쁘게 보일 수 있지만, 바쁠때 정말 정신없이 바쁘다 보니,
관리자가 그 경로에 있는 친구에서 이 콜도 같이해라 콜을 넣기도 하고,
이 경로는 좋지 않으니 콜을 빼서 다른 사람에게 줄 수도 있다.

이러한 이유로 위치 불러오기가 굉장히 중요하다.

하지만 안드로이드는 버전 업데이트를 하면서 어떻게 하면 배터리 소모를 줄일 수 있는 방법(최적화)을

고민하였고 다양한 제약이 걸리기 시작했다.

특히 안드로이드 9버전부터..

 

9 > 10 > 11 로 가면서 제약을 점점 더 구체적이고 사용자가 허가해야하는 부분도 많아졌다.
developer.android.com/about/versions/oreo/background-location-limits

 

백그라운드 위치 제한  |  Android 개발자  |  Android Developers

배터리 절약에 도움이 되는 위치 액세스 제한.

developer.android.com

Location Manager

  • 위치 업데이트는 시간당 몇 번만 백그라운드 앱에 제공됩니다.

현재 개발된 방법으로 초기에 공부했던 책 예시 코드에 따라 Location Manager 이걸로 개발을 진행하였다.

하지만 이게 백그라운드 앱에서 시간당 몇 번만? 이라는 제약이 있었고,
테스트결과 5분에 한번씩만 위치를 불러오는게 확인되었다.

 

따라서 다른 방법으로 개발해야할 필요성을 느꼈다.

 

2. geofencingapi(지오펜싱)

사용자의 실시간 위치와 출입 정보를 기록을 위해 만들어진 기술로 이 지오펜싱을 활용하니 
백그라운드에서도 실시간 위치를 잘 불러 왔다.

stackoverflow.com/questions/28535703/best-way-to-get-user-gps-location-in-background-in-android

 

Best way to get user GPS location in background in Android

In my android app i want to get user current location every few minute interval and update in to my center server using web service. Currently i am using Fused Location Provide for get user current

stackoverflow.com

여기서 좋아요 13개 받은
Grant required permission ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION after start service
글의 코드를 분석해보면 잘 돌아가는걸 확인할 수 있다.

여기서 

startForeground(101, notification);


이런코드가있는데

 

이 startForeground처럼 사용자에게 현재 백그라운드에서 위치 확인을 진행하겠습니다.
라는 노티를 띄우지 않으면 백그라운드에서 서비스가 실행되지 않는 이유로 이 코드가 들어있는 것이다.

이러한 제한이 사실 맞다고 본다.
이상한 어플을 깔아서 계속 내 위치가 전송되고, 그런 사고도 많이 있었기 때문에
당연히 개발하는 사람 입장에서는 제공해야한다고 생각한다.

댓글