Android Q foreground 서비스에서 위치 정보 액세스

입문


Android Q(API level29)에서 새 위치 정보 권한ACCESS_BACKGROUND_LOCATION을 추가했습니다.하지만 문서를 보더라도 특히 프론트 데스크 서비스의 동작 행위는 이해하기 어려워 조사해 봤다.
본고는 Android Q beta 4의 동작 확인 결과입니다.

권한 정보

  • ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION 권한: Android Q 이전부터 있었던 권한입니다.Android Q 이전에는 특별한 프론트/백그라운드의 차이 없이 위치 정보를 얻을 수 있습니다.하지만 안드로이드 Q에서는 프론트에 있을 때만 위치 정보를 얻을 수 있다.
  • ACCESS_BACKGROUND_LOCATION 권한: 안드로이드 Q(API level29)에 새로 추가된 권한입니다.배경의 위치 정보를 얻을 수 있습니다.이 권한은 ACCESS_COARSE_LOCATION 또는 ACCESS_FINE_LOCATION 과 함께 사용해야 합니다.
  • 그러니까
  • ACCESS_COARSE_LOCATION 또는ACCESS_FINE_LOCATION의 경우 프론트 데스크에서만 위치 정보를 얻을 수 있습니다.권한 요청 대화 상자 등에 Allow only while using the app 로 표시됩니다.
  • ACCESS_COARSE_LOCATIONorACCESS_FINE_LOCATIONandACCESS_BACKGROUND_LOCATION만 있는 상황에서 프론트 데스크와 백스테이지에서 위치 정보를 얻을 수 있다.권한 요청 대화 상자 등에 Allow all the time 로 표시됩니다.
  • 그러면 프론트 데스크톱 서비스가 프론트 데스크톱 처리, 프론트 데스크톱 처리인지, 아니면 프론트 데스크톱에서 위치 정보를 얻는지 조사한다.

    targetSdkVersion28 이하(Android Q 이전)에 구축된 응용 프로그램이 Android Q 장치에서 실행될 때

  • ACCESS_BACKGROUND_LOCATIONrequest permissin이 자동으로 부여됩니다.즉, Android Manifest.xml은 다음 내용을 지정할 필요가 없습니다.(SDK는 모릅니다ACCESS_BACKGROUND_LOCATION. 물론 지정도 잘못됩니다.)
  •     <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/>
    
  • ACCESS_BACKGROUND_LOCATION의 실행 시 권한 요청은 ACCESS_COARSE_LOCATION 권한 또는 ACCESS_FINE_LOCATION 권한의 요청 시 자동으로 이루어집니다.따라서 코드를 변경할 필요도 없다.

  • 그 결과 권한 요청 대화 상자에는 다음과 같은 세 가지가 표시됩니다.
  • Allow all the time
  • Allow only while using the app
  • Deny
  • 상기 권한의 Allow all the time을 선택한 경우에만 Foreground 서비스는 Activity가 백그라운드일 때도 위치 정보를 얻을 수 있습니다. targetSdkVersion29(Android Q)에 구축된 응용 프로그램을 Android Q 장치에서 실행할 때 ACCESS_BACKGROUND_위치 필요 없어요. 따라서 ACCESS_BACKGROUND_위치 권한 요청이 필요 없음 Foreground Service를 포지셔닝 데이터로 설정하기 위해 AndroidManifest.xml에서 foregroundServiceType="location"을 설정합니다. AndroidManifest.xml <service android:name="MyNavigationService" android:foregroundServiceType="location" ... /> </service> ACCESS_BACKGROUND_위치 권한이 없으므로 권한 요청 대화 상자에 다음 두 가지가 표시됩니다. Allow only while using the app Deny 만약 사용자 분배를 선택한다면 프론트 데스크톱 서비스도 백그라운드에서 위치 정보를 얻을 수 있다. ACCESS_BACKGROUND_위치 설정을 통해 targetSdkVersion28 이하(Android Q 이전)와 같은 설정을 할 수도 있습니다. 참고 자료
  • https://developer.android.com/preview/privacy/device-location?hl=ja
  • https://developers-jp.googleblog.com/2019/04/giving-users-more-control-over-their.html
  • 2020/06/12 Update


    https://developer.android.com/training/location/permissions#foreground에서 프론트 데스크 서비스가 Foreground Location(즉, Background Loaction이 아님)을 명확히 했다.그래서 조사는 옳았다.
    Your app is running a foreground service. When a foreground service is running, the system raises user awareness by showing a persistent notification. Your app retains access when it's placed in the background, such as when the user presses the Home button on their device or turns their device's display off.
    

    좋은 웹페이지 즐겨찾기