목차
- checkSelfPermission 이란?
- checkSelfPermission 함수 원형과 인자 및 반환 값 설명
- checkSelfPermission 권한 체크 예제
- checkSelfPermission를 활용한 위치 정확도 권한 확인 예제
- checkSelfPermission 다양한 권한 확인 예제
1. checkSelfPermission 이란?
checkSelfPermission
은 안드로이드 앱에서 특정 권한이 현재 사용자에게 허용되어 있는지 확인하는 메소드입니다.
사용자가 권한을 허용한 경우, 해당 권한을 사용하여 원하는 작업을 수행할 수 있습니다.
만약 권한이 거부되어 있는 경우, 앱은 권한을 요청할 수 있습니다.
2. checkSelfPermission 함수 원형과 인자 및 반환 값 설명
checkSelfPermission
함수의 원형은 다음과 같습니다:
int checkSelfPermission(Context context, String permission)
checkSelfPermission
함수는 두 개의 인자를 받습니다:
context
: 앱의Context
객체permission
: 확인하고자 하는 권한의 이름
checkSelfPermission
함수는 권한 상태에 따라 다른 정수 값을 반환합니다:
PackageManager.PERMISSION_GRANTED
: 권한이 허용되었음을 나타내는 값 (0)PackageManager.PERMISSION_DENIED
: 권한이 거부되었음을 나타내는 값 (-1)
3. checkSelfPermission 권한 체크 예제
checkSelfPermission
를 사용하여 특정 권한이 허용되었는지 확인하는 예제입니다.
private static final int LOCATION_PERMISSION_REQUEST_CODE = 100;
// ...
// 위치 권한 확인
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
== PackageManager.PERMISSION_GRANTED) {
// 위치 권한이 허용된 경우 작업 수행
} else {
// 위치 권한이 거부된 경우 권한 요청 화면 띄우기
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
LOCATION_PERMISSION_REQUEST_CODE);
}
4. checkSelfPermission를 활용한 위치 정확도 권한 확인 예제
checkSelfPermission
를 활용하여 위치 정확도를 제어하는 권한이 허용되었는지 확인하는 예제입니다.
private static final int LOCATION_ACCURACY_PERMISSION_REQUEST_CODE = 200;
// ...
// 위치 정확도 권한 확인
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
== PackageManager.PERMISSION_GRANTED &&
ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_BACKGROUND_LOCATION)
== PackageManager.PERMISSION_GRANTED) {
// 위치 정확도를 제어하는 권한이 허용된 경우 작업 수행
} else {
// 위치 정확도를 제어하는 권한이 거부된 경우 권한 요청을 위한 다이얼로그 표시
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_BACKGROUND_LOCATION},
LOCATION_ACCURACY_PERMISSION_REQUEST_CODE);
}
} else {
// Android 10 이전 버전은 별도의 위치 정확도 권한이 없음
// ACCESS_FINE_LOCATION 권한만 확인하면 됨
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
== PackageManager.PERMISSION_GRANTED) {
// 위치 권한이 허용된 경우 작업 수행
} else {
// 위치 권한이 거부된 경우 권한 요청을 위한 다이얼로그 표시
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
LOCATION_PERMISSION_REQUEST_CODE);
}
}
5. checkSelfPermission 다양한 권한 확인 예제
checkSelfPermission
를 활용하여 여러 개의 권한을 확인하는 예제입니다.
private static final int MULTIPLE_PERMISSIONS_REQUEST_CODE = 300;
// ...
// 필요한 여러 개의 권한 확인
String[] permissions = new String[]{
Manifest.permission.CAMERA,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_CONTACTS
};
List<String> permissionsToRequest = new ArrayList<>();
for (String permission : permissions) {
if (ContextCompat.checkSelfPermission(this, permission)
!= PackageManager.PERMISSION_GRANTED) {
// 권한이 허용되지 않은 경우 해당 권한을 요청할 리스트에 추가
permissionsToRequest.add(permission);
}
}
if (!permissionsToRequest.isEmpty()) {
// 권한 요청을 위한 다이얼로그 표시
ActivityCompat.requestPermissions(this,
permissionsToRequest.toArray(new String[0]),
MULTIPLE_PERMISSIONS_REQUEST_CODE);
} else {
// 모든 권한이 허용된 경우 작업 수행
}
위 예제에서는 카메라, 외부 저장소 쓰기 권한 및 연락처 읽기 권한을 확인하고, 필요한 권한들을 한 번에 요청하는 방법을 보여줍니다.
반응형