728x90
반응형
핸드폰에서 카메라나 위치, 저장공간 등등 권한 설정하는 방법을 포스팅하겠습니다.
1. androidmanifest.xml에 권한 설정하고싶은 것을 추가해준다.
ex-1) camera
<uses-permission android:name="android.permission.CAMERA" />
ex-2) location
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
2. 체크할 권한을 변수에 담아준다.
ex) location의 경우
val requestPermissions = arrayOf(
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION,
)
3. 권한 체크하기
권한이 설정이 안되어있으면 requestPermission으로 권한을 요청한다.
private val permissionRequestCode = 100
var failRequestPermissionList = ArrayList<String>()
fun callPermission() {
for (permission in requirePermissions) {
if (ContextCompat.checkSelfPermission(
permissionActivity.applicationContext,
permission
) != PackageManager.PERMISSION_GRANTED
) {
failRequestPermissionList.add(permission)
}
}
if (failRequestPermissionList.isNotEmpty()) {
val array = arrayOfNulls<String>(failRequestPermissionList.size)
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
ActivityCompat.requestPermissions(
permissionActivity,
failRequestPermissionList.toArray(array),
permissionRequestCode
)
}else{
ActivityCompat.requestPermissions(
permissionActivity,
failRequestPermissionList.toArray(array),
permissionRequestCode
)
}
}
}
4. 권한 결과값 받기
Activity에서 onRequestPermissionResult 를 통해 권한 결과를 받는다.
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,
grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
when (requestCode) {
permissionRequestCode -> {
// 권한이 비어있는 경우 에러
if (grantResults.isEmpty()) {
}
//거부된 권한이 있는지 확인한다
var isPermitted = true
val deniedPermission = ArrayList<String>()
for ((id, result) in grantResults.withIndex()) {
if (result == PackageManager.PERMISSION_DENIED) {
isPermitted = false
deniedPermission.add(permissions[id])
}
}
// 권한이 모두 충족된 경우
if (grantResults.isNotEmpty() && isPermitted) {
} else {
// 거부만 선택한 경우
}
}
}
728x90
반응형
'Kotlin' 카테고리의 다른 글
[ j android] 현재위치 -> 위도/경도, 주소 변환 (0) | 2022.08.10 |
---|---|
[j android] Geocoder >> List<Address> 반환 값 (0) | 2022.03.04 |
[ j android ] network 상태 항상 감지 (on,off) (0) | 2022.01.27 |
[ j android ] network 네트워크 상태 체크 (0) | 2021.12.23 |
[j android] Appbar에 뒤로가기 넣기 (0) | 2021.12.10 |