Android Coding

실시간 permission 처리 최종 #3

오마로 2017. 3. 22. 15:39
반응형



* 피쳐되기 전 필수 해결 사항:

- 안드로이드 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) 등록이 되었으면 좋겠네요. 고생한 보람이 있게 ^^


플러스베타 화이팅~, 스토어카메라 화이팅~


반응형