안드로이드앱에서는 기기에 있는 데이터나 기능들을 접근하기 위해서는 권한을 설정해줘야 합니다.
또한 그권한이 중요한 권한이거나 버전이 올라감에 따라 manifest에 사용하겠다고 알려주더라도 앱에서 또 한 번 사용자에게 이 권한을 사용해도 되는지 물어볼 수 있습니다.
ContextCompat.checkSelfPermission함수를 통하여 현재 권한이 있는지 확인할수있으며ActivityCompat.requestPermissions로 안드로이드에서 지원하는 권한용청 다이얼로그를 보여줄 수 있습니다.
그렇지만 거부했을경우 사용자에게 이 부분으로 생길 수 있는 문제를 알릴 필요가 있습니다. 이러한 부분은 ActivityCompat.shouldShowRequestPermissionRationale로 조건문으로 검사할 수 있습니다.
// Here, thisActivity is the current activity
// 여기서 thisActivity는 현재 Activity입니다.
if (ContextCompat.checkSelfPermission(thisActivity,
Manifest.permission.READ_CONTACTS)
!= PackageManager.PERMISSION_GRANTED) {
// Should we show an explanation?
// 설명을 보여줘야 할까요?
if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
Manifest.permission.READ_CONTACTS)) {
// Show an expanation to the user *asynchronously* -- don't block
// this thread waiting for the user's response! After the user
// sees the explanation, try again to request the permission.
// *비동기적으로* 사용자에게 설명을 표시합니다. 사용자의 응답을 기다리는
// 이 스레드를 차단하지 마세요! 사용자가 설명을 본 후 권한을 다시 요청해 보세요.
} else {
// No explanation needed, we can request the permission.
// 설명이 필요하지 않습니다. 허가를 요청할 수 있습니다.
ActivityCompat.requestPermissions(thisActivity,
new String[]{Manifest.permission.READ_CONTACTS},
MY_PERMISSIONS_REQUEST_READ_CONTACTS);
// MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
// app-defined int constant. The callback method gets the
// result of the request.
// MY_PERMISSIONS_REQUEST_READ_CONTACTS는 앱에서 정의한 int
// 상수입니다. 콜백 메소드는 요청 결과를 가져옵니다.
}
}
또한 ActivityCompat.requestPermissions이후에는 onRequestPermissionsResult가 호출되기 때문에 이후 결과에 따라서 이벤트들을 구현할 수도 있습니다.
try {
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
.setData(Uri.parse("package:" + getPackageName()));
startActivity(intent);
} catch (ActivityNotFoundException e) {
e.printStackTrace();
Intent intent = new Intent(Settings.ACTION_MANAGE_APPLICATIONS_SETTINGS);
startActivity(intent);
}
이런 식으로 setting으로 가게 해서 권한을 체크 하게 유도할 수도 있습니다.
'안드로이드 > 안드로이드' 카테고리의 다른 글
[Android/Kotlin] SharedPreferences (0) | 2023.09.14 |
---|---|
[Android/Kotlin] DialogFragment 크기조절 (0) | 2023.09.13 |
[Android/Kotlin] 리사이클러뷰(RecyclerView) 스와이프 이벤트 (0) | 2023.09.11 |
[Android/Kotlin] attachToParent (0) | 2023.09.05 |
[Android/Kotlin] 프래그먼트안 프래그먼트에서 뒤로가기 (0) | 2023.09.04 |