일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- android architecture component
- Django REST Android
- 안드로이드 구글맵
- Django REST
- Rxjava2
- dart
- Python
- C++
- Kotlin
- android push
- Java
- Flutter TextField
- 안드로이드
- mfc
- Android
- 코틀린
- livedata
- RxJava
- RxAndroid
- 프로그래머스
- Django REST framework
- flutter firestore
- UWP
- C
- Android P
- FLUTTER
- NDK
- C/C++
- kodility
- 알고리즘
- Today
- Total
개발하는 두더지
[Android] 안드로이드 6.0이상 런타임에 권한 요청 획득 본문
안드로이드 6.0 ( API 23 ) 부터 사용자는 앱이 설치될 때가 아니라 앱이 실행되는 중에 앱에 권한을 부여합니다.
이 접근방식에서는 사용자가 앱을 설치하거나 업데이트할 때 권한을 부여할 필요가 없으므로 앱 설치 과정이 간소화됩니다.
또한 사용자가 앱의 기능을 더 세부적으로 제어할 수 있습니다.
크게 4가지가 있습니다.
권한 확인
앱에 위험 권한이 필요한 경우, 해당 권한이 요구되는 작업을 실행할 때마다 이 권한의 보유 여부를 확인해야합니다.
ContextCompat.checkSelfPermission()
를 사용합니다.
앱에 권한이 있는 경우 PackageManager.PERMISSION_GRANTED 를 반환하고, 권한이 없는 경우
PERMISSION_DENIED를 반환합니다.
권한 요청
requestPermissions()
를 사용합니다. 이 메서드는 비동기식으로 작동합니다. 즉각적으로 반환되며, 사용자가 대화상자에 응답한 후에 시스템은 그 결과를 가지고 앱의 콜백 메서드를 호출합니다.
앱에 권한이 필요한 이유 설명
shouldShowRequestPermissionRationale() 를 사용합니다. 이전에 앱이 이 권한을 요청했고 사용자가 요청을 거부한 경우, 이 메서드는 true를 반환합니다.
과거에 사용자가 권한 요청을 거절하고 권한 요청 시스템 대화상자에서 Don't ask again 옵션을 선택한 경우, 이 메서드는 false를 반환합니다.
권환 확인, 앱에 권한이 필요한 이유 설명, 권한 요청을 하는 샘플
// Activity에서 동작
if (ContextCompat.checkSelfPermission(thisActivity,
Manifest.permission.READ_CONTACTS)
!= PackageManager.PERMISSION_GRANTED) {
// 설명이 필요한가?
if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
Manifest.permission.READ_CONTACTS)) {
// 사용자에게 설명을 보여줍니다.
// 권한 요청을 다시 시도합니다.
} else {
// 권한요청ActivityCompat.requestPermissions(thisActivity,
new String[]{Manifest.permission.READ_CONTACTS},
MY_PERMISSIONS_REQUEST_READ_CONTACTS);
}
}
권한 요청 응답 처리
onRequestPermissionsResult() 를 사용합니다. 권한이 부여되었는지 여부를 확인하려면 재정의를 해야합니다.
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode) {
case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 권한 획득 성공
} else {
// 권한 획득 실패
}
return;
}
}
}
권한 체크를 해야하는 목록입니다. 아래의 목록은 권한 획득 창을 띄워서 권한을 받아야합니다.
권한 그룹 | 권한 |
---|---|
CALENDAR | |
CAMERA | |
CONTACTS | |
LOCATION | |
MICROPHONE | |
PHONE | |
SENSORS | |
SMS | |
STORAGE |
Fragment에서 권한 적용 방법입니다.
'Java,Android' 카테고리의 다른 글
[Android] Fragment와 MVP 패턴을 이용한 탭 만들기 (0) | 2017.06.22 |
---|---|
[Android] 프래그먼트(Fragment)에 구글맵(GoogleMap) 자동완성검색 위젯 추가하기 (20) | 2017.05.19 |
[Android] 구글맵(GoogleMap) 현재위치 따라가기 (81) | 2017.05.18 |
[Android] Fragment에 구글맵(GoogleMap) 띄우기 (15) | 2017.05.18 |
[Android] 구글맵 (GoogleMap) SDK 설치 및 API Key 발급 (4) | 2017.05.18 |