티스토리 뷰
안드로이드에 M버전으로 업데이트 되면서, 새로운것이 추가가 되었습니다.
아이폰과 비슷한 기능인 퍼미션 제어 기능인데요.
사용자는 설정에서 언제든지 퍼미션을 끄고 켤수 있게 되었으며,
기존의 앱들의 설치가 되어 있는 상황에서 모든 퍼미션을 사용하여야 하는 상황에서 퍼미션 체크를 하여서, 확인을 하여야 합니다.
이제 쓰잘데기 없이 사용자의 정보를 빼내어 가는 짓은 약간은 덜해지겠네요.
일단 프로젝트를 빌드시에 targetVersion을 23(M)이상으로 잡아줍니다.
이상이라고 이야기하는것은 추후 버전이 업데이트되면 버전을 올려야 한다는것입니다.
일단 targetVersion을 23보다 작게 지정을 하여 두면, 설정에서 퍼미션을 꺼두어도 그냥 사용할 수 있습니다.
23보다 작게와 크게의 차이는 23부터는 설치시 퍼미션이 꺼져서 설치가 되고,
23보다 작을 경우에는 설치시 퍼미션이 켜져서 설치가 됩니다.
지금은 프리뷰라서 그런데, 이 부분은 어떻게 될지 모르기에 그냥 우리는 22로 빌드하자라고 생각하는건 위험한 발상일것 같습니다.
일단 구글의 문서는 다음과 같습니다.
https://developer.android.com/preview/features/runtime-permissions.html
내용을 보면 누구라도 알수 있을 정도로 잘 만들어 두었고,
설정쪽에 표시가 되는 부분들은 퍼미션의 그룹으로 묶여있는 부분들로 항목이 줄어서 나옵니다.
주소록을 가져오는 퍼미션을 가지고 예를 들겠습니다.
Activity 기준으로 설명하도록 합니다.
1. 권한 체크하기
checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED
2. 권한 획득창에서 사용자가 체크를 눌러서, 권한 획득창이 뜰수 없는 경우. 설정창으로 넘겨주어야 하는 부분
shouldShowRequestPermissionRationale();
3. 권한 획득을 위한 API
Activity.requestPermissions(String[], int);
4. Activity에서 callback받기
onRequestPermissionResult(int, String[], int[])
5. 예제
if(checkSelfPermission(Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.READ_CONTACTS}, REQUEST_ID);
return;
} else {
// 정상적으로 권한이 받아진 경우임.
}
// call back은 다음에서 받을수 있습니다.
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case REQUEST_ID : {
int length = grantResults.length;
boolean isGranted = true;
for(int index=0; index<length; index++) {
if(grantResults[0] != PackageManager.PERMISSION_GRANTED) {
isGranted = false;
break;
}
}
if(isGranted) {
// good!
} else {
// oh my god
if(shouldShowRequestPermissionRationale(Manifest.permission.READ_CONTACTS)) {
// 다시 보지 않기를 눌렀을 경우에 이쪽에서 처리하도록 합니다.
}
}
return;
}
}
}
6. 추가적인 내용
- 2015.10.05.
shouldShowRequestPermissionRationale() 의 return
1. 단말의 OS가 마시멜로보다 낮은버전이라면 false
2. 해당 권한이 ON (승인이 되어있는 경우) 되어 있는 경우 false
3. 해당 권한에 대해 OFF (승인이 되어 있지 않는 경우) 되어 있는 경우 첫 호출시 false
4. 3번 케이스 이후 호출 ture (다시 묻지 않기를 체크하고 거부한적이 없음)
5. 해당 권한에 대해 다시 묻지 않기를 체크한 상태로 거부한경우 false
'Mobile > Android' 카테고리의 다른 글
[Android]DialogFragment (0) | 2015.09.07 |
---|---|
[Android]NavigationDrawer (0) | 2015.09.07 |
[Android]ListView안의 EditText의 Focus문제 (0) | 2015.08.10 |
[Android]Account 화면 호출 (0) | 2015.08.03 |
[Android]LayoutInflater (0) | 2015.08.03 |
- Total
- Today
- Yesterday
- cocoapods
- centos8
- Windows
- Gradle
- CentOS
- Python
- windows10
- go
- Xcode
- android
- MySQL
- php
- docker
- nodejs
- git
- Java
- Spring
- tomcat
- rxswift
- golang
- ios
- SWIFT
- Kotlin
- intellij
- Codable
- war
- ubuntu
- Linux
- github
- enum
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |