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

사용자가 응급권한을 거부한 경우 다시 권한을 요청할 수 있나요?

0 추천

비콘 스캔을 위해 위치권한과 블루투스 권한이 꼭 필요합니다.

만약 사용자가 거부한경우 다시 물어보고 어떻게든 권한을 물어보고

권한을 거부하면 사용할 수 없다고 띄우고 계~속 권한 요구를 하고 싶습니다.

 

하지만 권한을 거부하면 권한요청(requestPermissions)을 해도 권한을 물어보지 않더라구요.

 

혹시 방법이 있을까요?

아래는 제가 사용했던 코드를 넣었습니다.

private static final int PERMISSIONS_REQUEST_CODE = 100;
//권한 추가
String[] permissions  = new String[]{
        Manifest.permission.ACCESS_COARSE_LOCATION,
        Manifest.permission.ACCESS_FINE_LOCATION,
        Manifest.permission.BLUETOOTH_SCAN
};


checkPermissions(permissions);
public void checkPermissions(String[] permissions) {
    ArrayList<String> targetList = new ArrayList<String>();
    boolean isDenied = false;

    for (int i = 0; i < permissions.length; i++) {
        String curPermission = permissions[i];
        int permissionCheck = ContextCompat.checkSelfPermission(this,curPermission);
        if(permissionCheck == PackageManager.PERMISSION_GRANTED) {
            Toast.makeText(this, curPermission + " 권한 있음.", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(this, curPermission + " 권한 없음.", Toast.LENGTH_SHORT).show();
            if (ActivityCompat.shouldShowRequestPermissionRationale(this, curPermission)) {
                Toast.makeText(this, curPermission + " 권한 설명 필요함.", Toast.LENGTH_SHORT).show();
                targetList.add(curPermission);
            } else {
                targetList.add(curPermission);
            }
        }
    }

    if (targetList.size() == 0) return;


    String[] targets = new String[targetList.size()];
    targetList.toArray(targets);

    ActivityCompat.requestPermissions(this, targets, PERMISSIONS_REQUEST_CODE);
}



@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
    boolean isDenied = false;
    switch (requestCode) {
        case PERMISSIONS_REQUEST_CODE: {
            if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                Toast.makeText(this, "첫 번째 권한을 사용자가 승인함.",
                        Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(this, "첫 번째 권한 거부됨.", Toast.LENGTH_SHORT).show();
                isDenied = true;
            }

            if (isDenied) {
                checkPermissions(permissions);
            }
            return;
        }
    }


    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
베타테스터 (260 포인트) 님이 2022년 7월 11일 질문

1개의 답변

0 추천
사용자가 명확하게 권한 요청을 거부한 경우는 세팅에서 다시 권한을 주기 전까지는 가능하지 않은 것으로 압니다.
사용자가 권한 거부를 했다는 것은 해당 권한에 대한 오해가 있거나 앱을 신뢰하지 않아서 생기는 문제이므로
권한이 왜 필요한지 납득할 수 있는 안내문구룰 넣어주는 것이 좋겠고 그래도 사용자가 거부를 한다면 그건 해당기능이나 앱을 사용하지 않겠다는 의사표시이므로 존중해야 할 것 같습니다.
spark (227,530 포인트) 님이 2022년 7월 12일 답변
방향을 살짝 잘못잡았네요. 거부한경우 변경할 수 있는 설정을 띄워주면 될듯 합니다.
포켓몬고 같은경우 언제나모험모드를 켠 경우 항상허용이 안되어 있으면
항상허용을 켜야합니다. 라고 든다음 설정창이 떴었던거 같습니다.
비슷하게 구현하면 될듯하네요.
답변감사합니다.
...