ContextCompat.checkSelfPermission 

  : 해당 권한이 있는지 여부 확인

 

ActivityCompat.shouldShowRequestPermissionRationale

  : 처음 권한 거부한 이력이 있거나 다시보지 않기 설정시 true 리턴됨

 

[동작설명]

1. 처음 권한 허용 전 호출시 false 리턴됨.

2. 허용안함 클릭후 다시 호출시 true 리턴됨.

3. 허용안함 두번 이상 클릭시 false 리턴됨.

4. 허용 후 수동으로 허용 안함 변경 후 호출시 true 리턴됨.

 

ActivityCompat.requestPermissions

  : 해당 권한 요청 (권한요청 시스템 다이알로그 노출됨)

 

 

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { //>= 23
    if (ContextCompat.checkSelfPermission(getContext(), Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
		
        // shouldShowRequestPermissionRationale true 일 경우 다이얼 로그로 허용관련 내용 전달 및
        // 설정으로 갈수 있게 처리해줌.
        if (!ActivityCompat.shouldShowRequestPermissionRationale((Activity) getContext(), Manifest.permission.CAMERA)) {
            ActivityCompat.requestPermissions((Activity) getContext(), new String[]{Manifest.permission.CAMERA}, 0);
            return;
        } else {
            // 다시 보지 않기 또는 처음 거부 했던 이력이 있을 경우
            View.OnClickListener confirmListener = new View.OnClickListener() {
                public void onClick(View v) {
                    mCustomDialog.dismiss();
                    // 앱 권한 설정창으로 이동
                    Utils.appSettingOpen(getContext());
                }
            };

            View.OnClickListener exitListener = new View.OnClickListener() {
                public void onClick(View v) {
                    mCustomDialog.dismiss();
                }
            };

            mCustomDialog = new CustomDialog(getContext(),
                    "설정", // 제목
                    "서류 촬영을 위해 카메라 권한이 필요합니다. 설정에서 허용해 주세요.", // 내용
                    "나가기",
                    "설정",
                    exitListener, // 왼쪽 버튼 이벤트
                    confirmListener); // 오른쪽 버튼 이벤트

            mCustomDialog.show();
            return;

        }
    }
}

+ Recent posts