- 안드로이드 6.0(마시멜로)이 출시되면서 사용자가 직접 런타임 앱 권한을 관리할 수 있게 되었습니다. 따라서 사용자가 앱 실행 중 일부 혹은 전체 권한을 거부했을 때, 이를 적절하게 처리하는 것이 중요합니다. 권한 요청 과정은 아래의 가이드라인을 준수해야 합니다.
• 사용자가 권한 사용을 거부하는 경우, 다시 해당 권한이 필요한 이유를 설명하시되 앱 설정으로 이동시키지 마십시오. 사용자가 ‘다시 묻지 않음'을 체크하고 거부하였을 경우에 설정 화면으로 유도하십시오.
-------------------------------------------------------------
다시 지적을 받았네요 ㅠㅜ
기존에 설정 버튼을 달아서 사용자에게 확인토록 하면 될 거라고 판단되었는데, 아니였네요 ^^;;
1.일단 권한에 대한 설명 화면 구성
2.권한 부여 클릭 시, 3개의 권한 처리
private boolean checkAndRequestPermissions() {
int permissionPHONE = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE);
int permissionCAMERA = ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA);
int storagePermission = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE);
List<String> listPermissionsNeeded = new ArrayList<>();
if (storagePermission != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission.READ_EXTERNAL_STORAGE);
}
if (permissionCAMERA != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission.CAMERA);
}
if (permissionPHONE != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission.READ_PHONE_STATE);
}
if (!listPermissionsNeeded.isEmpty()) {
goAlertTitle();
if(isAskPermissionPhone){
goPermissionSetting();
}else if(isAskPermissionCamera){
goPermissionSetting();
}else if(isAskPermissionStorage){
goPermissionSetting();
}else{
if(isFirstPermission) {
ActivityCompat.requestPermissions(this, listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()]), RequestPermissionCode);
isFirstPermission = false;
}else{
ActivityCompat.requestPermissions(this, listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()]), RequestPermissionCodeSecond);
}
}
return false;
}else{
goPermissionSetting();
}
return true;
}
3.폰 정보 거부, 카메라&저장 권한 승인
4.권한부여 클릭 > 폰 정보에 대한 다시 묻기
권한퍼미션이 -1 이고, 다시 묻지 않음이 false이면 세팅화면으로 ......
아래는 예시.. 처리임
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if(mPermissionReadPhoneState != PackageManager.PERMISSION_GRANTED && !ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.READ_PHONE_STATE)) {
goPermissionSetting();
}
}
5.세팅화면
private void goPermissionSetting(){
GomsLog.d(TAG, "goPermissionSetting()");
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS).setData(Uri.parse("package:" + BuildConfig.APPLICATION_ID));
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
startActivityForResult(intent, AppConstant.ACTIVITY_REQUEST_CODE_PERMISSION_SETTING);
}
6.최종 적용 영상
그리고, 다시 업데이트 진행 ^^
꼭 구글 피처드(Google Featured) 등록이 되었으면 좋겠네요. 고생한 보람이 있게 ^^
플러스베타 화이팅~, 스토어카메라 화이팅~
'Android Coding' 카테고리의 다른 글
Parcelable을 사용한 Object Array 전달 (0) | 2017.05.31 |
---|---|
OkHttp3을 활용한 Multipart Image 전송 (3) | 2017.03.24 |
실시간 permission 처리 #2 (0) | 2017.03.17 |
Activity Intent Flag 참조글 (0) | 2017.03.13 |
카메라 수평계 센서 버그 처리. Orientation (0) | 2017.03.10 |