이 글은 안드로이드 6.0, 10, 11 버전 별 위치 권한 변화에 대해서 설명합니다.
목차
- 안드로이드 6.0
- 안드로이드 10
- 안드로이드 11
안드로이드 6.0
✍ 안드로이드 6.0 버전 이후부터 앱에서 필요한 권한이 있을때 사용자로부터 권한을 받게되었다. (이전에는 설치할 때 필요한 권한을 요구했다.)
위치 권한이 필요하면 Manifest에 위치 권한을 추가한 뒤에, 필요한 시점에 사용자에게 위치 권한을 요청할 수 있다.
manifest
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
위에서 ACCESS_COARSE_LOCATION은 네트워크(와이파이, 3G, 4G 등)를 이용해서 단말기 위치를 식별하고, ACCESS_FINE_LOCATION은 GPS와 네트워크를 이용한다. 때문에 ACCESS_FINE_LOACTION을 사용하면 더 정확한 위치를 알 수 있다.
developer.android.com/training/location/permissions?hl=ko
위치 권한 요청 java 소스코드
사용자가 위치 권한에 동의하지 않은 상태라면 매니페스트에 위치 권한을 추가하고, 다음과 같은 코드로 권한을 요청할 수 있다.
int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION);
if(permissionCheck == PackageManager.PERMISSION_DENIED){ //위치 권한 확인
//위치 권한 요청
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 0);
}
위치 권한 허용 상태는 설정 - 어플리케이션 - 앱 권한에서 확인할 수 있다.
안드로이드 10
✍ 안드로이드 10에서는 백그라운드(Background) 위치 권한과 포그라운드(Foreground) 위치 권한이 나뉘었다.
백그라운드는 앱의 화면이 보이지 않는 상태, 포그라운드는 앱의 화면이 보이는 상태를 말한다.
안드로이드 10에서는 매니페스트에서 다음 처럼 세 가지로 위치 권한을 설정할 수 있다. ACCESS_BACKGROUND_LOCATION는 백그라운드 위치 권한을 나머지는 포그라운드 위치 권한을 의미한다.
manifest
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
위 매니페스트 정보를 사용해서 사용자에게 위치 권한을 요청하면, 다음과 같은 화면을 볼 수 있다. 허용할 수 있는 위치 권한이 이전 버전과는 다르다.
'항상 허용'은 백그라운드, 포그라운드 위치 권한을 모두 허용한다는 의미다.
'앱 사용 중에만 허용'은 포그라운드 위치 권한만 허용한다는 의미다.
소스 코드를 통해 위치 권한을 요청할 때도 다음과 같이 포그라운드, 백그라운드 중에 필요한 위치 권한을 나누어 요청할 수 있다.
int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION);
if(permissionCheck == PackageManager.PERMISSION_DENIED){ //포그라운드 위치 권한 확인
//위치 권한 요청
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 0);
}
int permissionCheck2 = ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_BACKGROUND_LOCATION);
if(permissionCheck == PackageManager.PERMISSION_DENIED){ //백그라운드 위치 권한 확인
//위치 권한 요청
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_BACKGROUND_LOCATION}, 0);
}
설정 - 어플리케이션 - 앱 권한에서의 위치 권한 허용 상태 옵션도 다음처럼 변경되었다.
안드로이드 11
✍ 안드로이드 11에서는 사용자가 선택할 수 있는 위치 권한 옵션이 더 세분화 되었다.
안드로이드 10에서 '항상 허용', '앱 사용 중에만 허용', '거부'가 있었다.
안드로이드 11에서는 '항상 허용', '앱 사용 중에만 허용', '이번만 허용', '거부'로 한 가지 옵션이 더 생겼다.
✍ 또한 위치 권한 요청을 해도 앱에서 즉시 '항상 허용' 옵션을 선택할 수 없어졌다.
위에 청록색 글씨로 보이는 '설정에서 액세스를 허용'을 클릭해서 아래와 같이 설정 화면으로 이동해야 '항상 허용' 옵션을 선택할 수 있도록 변경되었다.
출처
댓글