마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

권한 설정 관련인데... 한번 읽어보고 문제점 지적 좀 해주세요 ㅠ

0 추천
권한이 있는지 체크하고 다시 보지 않기를 눌렀을 경우에는 어플 설정창으로 이동 되는 건데요..

실행 다 잘 되고 문제 없다고 생각하는데... 선배가 기본 규칙 같은 거가 잘못됬다고 하는데 ..

뭐가 잘 못 된건가요 ..ㅠ 아무리 생각해봐도 모르겠습니다.

    

// 특정한 하나의 권한만 허용을 원할때
    // permission : 허용을 원하는 권한 이름(android.permission.WRITE_EXTERNAL_STORAGE)
    // 접근제어자 수정 및 변수명 규칙 적용
    protected boolean checkSystemWritePermission(String permission) {
        if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{permission}, MY_PERMISSION_REQUEST_STORAGE);
            return false;
        }
        return true;
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        switch (requestCode) {
            case MY_PERMISSION_REQUEST_STORAGE:
                if (grantResults.length > 0 && grantResults[0] != PackageManager.PERMISSION_GRANTED) {
                    if (!ActivityCompat.shouldShowRequestPermissionRationale(this, permissions[0])) {
                        Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
                                .setData(Uri.parse("package:" + getPackageName()));
                        startActivity(intent);
                    }
                }
                break;
        }
    }
앞집고양 (120 포인트) 님이 2017년 6월 15일 질문

1개의 답변

0 추천
shouldShowRequestPermissionRationale() 메소드는 app 이전 runtime permission popup에서
'Don't ask again'를 체크하지 '않고' 사용자에 의해 거절된 적이 있는지 확인하는 메소드입니다.

true라면 runtime permission을 묻기전에 permission이 필요한 이유에 대해 사용자에게 알려주는
popup을 보여줘야합니다. 번역하면 "Permission을 요청하는 이유를 보여줘야하니?"정도가 되겠죠.

따라서 shouldShowRequestPermissionRationale() 메소드는 runtime permission popup의 결과를
받고 호출하는 메소드가 아니라, runtime permission을 요청하기 전에 check해야하는 메소드입니다.
디자이너정 (42,810 포인트) 님이 2017년 6월 18일 답변
디자이너정님이 2017년 6월 18일 수정
...