반응형

안드로이드 6.0 이상부터 필요한 권한 획득 코드

  • 예제는 폰상태, 카메라, 오디오녹음 세개의 권한을 요청

define

public static final int PERMISSION_1 = 10000;

onCreate

if (checkPermission(new String[] {Manifest.permission.READ_PHONE_STATE, Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO}, PERMISSION_1)) {
    initPrcss();
}

권한 요청 Function

@TargetApi(Build.VERSION_CODES.M)
public boolean checkPermission(String[] permissions, int type) {
	//type : PERMISSION_1이 넘어옴
    try {
        // 안드로이드 6.0 미만 (마시멜로 미만) 버전 퍼미션 체크 패스
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
            return true;
        }
 
        boolean isNotGrant = false;
        // 필요한 권한 중 거부되어 있는 권한이 있는지 체크
        for(String permission : permissions) {
            if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {
                isNotGrant = true;
                break;
            }
        }
 
        if (isNotGrant) {
            // 안드로이드 권한 요청
            ActivityCompat.requestPermissions(this, permissions, type);
            return false;
        }
    }catch (Exception e) {
        e.printStackTrace();
    }
    return true;
}

권한 요청 응답

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    try {
        ArrayList<String> deniedPermissionArrayList = new ArrayList<String>();
        boolean grant = true;
        int i = 0;
 
        // 퍼미션이 모두 승인되었다면, grant = true
        for (int isGrant : grantResults) {
            if (isGrant != PackageManager.PERMISSION_GRANTED) {
                grant = false;
                deniedPermissionArrayList.add(permissions[i]);
            }
            i++;
        }
 
        // 권한을 승인했을 경우
        if (grant) {
            initPrcss();
        } else {
            failPrcss();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

권한 요청 성공/실패 시의 Function

//성공시
void initPrcss() {
	//...
}

//실패시
void failPrcss() {
	//...
}

(참고) 앱설정 이동 : 권한획득 실패시에 이동을 위해

Intent intent = new Intent(Settings.ACTION_MANAGE_APPLICATIONS_SETTINGS);
intent.setFlags(FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

 

반응형

'안드로이드' 카테고리의 다른 글

Android Webview(Remote, Local)  (2) 2021.11.14
Android Keyboard Show/Hide 이벤트 수신  (0) 2021.11.14
Android adb 사용  (0) 2021.11.14
Android Version List  (1) 2021.11.14
Android RecyclerView StaggeredGrid  (0) 2021.11.14
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기