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

android 마시멜로우 버전부터 권한 얻을때 질문있습니다

0 추천

마시멜로우 버전에서 권한 얻는 기능을 개발중입니다

앱 특성상 권한을 무조건 얻게 해야합니다

사용자가 권한 팝업창에서 거부를 선택했을때는 다시 권한 팝업창을 보여줘서 허용을 선택할때까지 반복합니다

근데 다시 묻지 않기를 선택했을때도 마찬가지로 다시 권한 팝업창을 보여주게끔 했는데 생각처럼 작동 하지않습니다

"다시 묻지 않기 check" 로그가 계속 찍힙니다 팝업창은 안뜨고요

@Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        switch (requestCode) {
            case MY_PERMISSION_REQUEST_CODE :
                if (grantResults.length > 0) {
                    for (int i = 0; i < grantResults.length; i++) {
                        boolean result =  grantResults[i] == PackageManager.PERMISSION_GRANTED;
                        if (!result) {
                            /**
                             * 처음권한 요청시 false 리턴
                             * 즉 사용자가 [다시 묻지 않기]를 체크하지 않고, 1번이상 권한요청에 대해 거부한 경우에만 true를 리턴함
                             */
                            if(ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, permissions[i])) {
                                Log.d(TAG, "무조건 권한 허용 해야합니다.");
                                ActivityCompat.requestPermissions(MainActivity.this, permissions, MY_PERMISSION_REQUEST_CODE);
                            } else {
                                Log.d(TAG, "다시 묻지 않기 check");
                                ActivityCompat.requestPermissions(MainActivity.this, permissions, MY_PERMISSION_REQUEST_CODE);
                            }
                        }
                    }
                }
                break;
        }
    }

답변 부탁드려요 ㅠ

우랴 (3,680 포인트) 님이 2017년 2월 13일 질문
런타임 권한 설정 부분은 시스템영역이라 어플리케이션이 건들수가 없을 건데염;; 오히려 사용자가 다시묻지 않기를 체크했었는데 또 물어본다면 OS 입장에서는 그게 문제가 될듯;;
답변 감사합니다! 그럼 다시 묻지 않기는 막을 수 없는건가요??
정상적인 경우라면 못막는게 당연하다고 봅니다.
억지로 방법을 찾는다면 시스템설정에서 데이터/캐시 삭제를 하면 어플리케이션 설정값도 초기값으로 돌아가면서 다시묻지 않기 설정도 초기화 되는것을 확인할 수 있는데 이를 코드상으로 구현이 가능하다면 그게 방법이라면 방법이겠네요.

제가 방금 잠깐 찾기로는 일단 킷켓 이하 버전에서는  ((ActivityManager)context.getSystemService(ACTIVITY_SERVICE))
            .clearApplicationUserData();
이런식으로 초기화가 가능하다고 하는데 문제는 M버전 이상에서 되어야 하는거잔아요. 가능할지는 모르겠지만 이와 관련해서 한번 찾아보셔용.
생각지도 못했던 방법인데 정말 감사드립니다 ㅎㅎ

2개의 답변

0 추천
쎄미 (162,410 포인트) 님이 2017년 2월 13일 답변
라이브러리는 사용하면 안되서요..
0 추천
권한이 없을 때 적절한 설명없이 무조건 권한 팝업을 띄우면 사용자가 보기에 앱이 매우 이상할 겁니다.

사용자에게 안내를 한 후 권한 팝업을 띄우세요.

사용자가 다시 묻지 않기를 선택한 경우 사용자에게 안내한 후 앱을 종료하세요.
익명사용자 님이 2017년 2월 13일 답변
...