상세 컨텐츠

본문 제목

Android Kotlin Permission

Android Kotlin

by 신농해태 2024. 9. 24. 19:15

본문

반응형

Permission

1. App에 대한 <permission> 태그 추가
<permission android:name="com.example.permission.TEST_PERMISSION"
    android:label="Test Permission"
    android:description="@string/permission_desc"
    android:protectionLevel="dangerous" />
- AndroidManifest.xml 파일에 추가
- name : permission  이름
- label, description : permission에 대한 설명
- protectionLevel : 보호 수준
        normal : 낮은 수준 보호. 유저에게 권한 부여 요청 안함
        dangerous : 높은 수준 보호. 유저에게 권한 부여 요청
        signature : 동일한 키로 사인된 앱만 실행
        signatureOrSystem : 안드로이드 시스템 앱 이거나 동일키로 사인된 앱에서 실행

2. Component에 대한 Permission 설정
<activity
    android:name=".MainActivity"
    android:exported="true"
    android:permission="com.example.TEST_PERMISSION">
</activity>    
퍼미션을 걸고 싶은 액티비티에 permission 항목에 퍼미션 이름 입력

3. Permission 획득
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
   <uses-permission> 태그에 획득할 퍼미션 이름을 입력

4. 시스템 Permission 종류

앱과 앱 간의 연동에 더불어, 시스템에서 퍼미션으로 보호하는 기능을 연동하려면 해당 Permission 획득해야함
ACCESS_FINE_LOCATION : 위치 정보 
ACESS_NETWORK_STATE : 네트워크 정보 
ACCESS_WIFI_STATE : Wi-Fi 네트워크 정보 
BATTERY_STATS : 배터리 정보 
BLUETOOTH : 블루투스 장치에 연결
BLUETOOTH_ADMIN : 블루투스 장치를 검색하고 페어링
CAMERA : 카메라 장치
INTERNET : 네트워크 연결
READ_EXTERNAL_STORAGE : 외부 저장소 파일 읽기
WRITE_EXTERNAL_STORAGE : 외부 저장소에 파일 쓰기
READ_PHONE_STATE : 전화기 각종 정보
SEND_SMS : SMS 발신
RECEIVE_SMS : SMS 수신
RECEIVE_BOOT_COMPLETED : 부팅 완료 시 실행
VIBRATE : 진동

5. Permission Check
API Level 23 이전 버전에서 퍼미션은 신고제, API Level 23 버전부터 퍼미션은 허가제
val status = ContextCompat.checkSelfPermission(this, "android.permission.ACCESS_FINE_LOCATION")
if (status == PackageManager.PERMISSION_GRANTED) {
    Log.d("Permission", "permission granted")
} else {
    Log.d("Permission", "permission denied")
}
  퍼미션 체크는 checkSelfPermission() 함수 이용. 매개변수로 퍼미션 이름을 준다.
  결과 값은 상수로 전달
  PackageManager.PERMISSION_GRANTED : 퍼미션이 허락된 경우

       작업 실행
  PackageManager.PERMISSION_DENIED : 퍼미션이 거부된 경우 -> 
       유저에게 퍼미션을 허락해 달라는 요청을 보내야 한다.

6. Permission Request 방법


1)  requestPermissions() 방법
ActivityCompat.requestPermissions(this, arrayOf<String>("android.permission.ACCESS_FINE_LOCATION"), 100)
한꺼번에 여러개의 퍼미션을 배열(arrayOf)로 줄 수 있다.
유저가 거부 혹은 확인을 선택하면 onRequestPermissionsResult() 함수가 자동 콜 됨.
override fun onRequestPermissionsResult(
    requestCode: Int,
    permissions: Array<out String>,
    grantResults: IntArray   // 유저의 선택
) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults)
    if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
     Toast.makeText(this, "permission granted", Toast.LENGTH_SHORT).show()
    } else {
     Toast.makeText(this, "permission denied", Toast.LENGTH_SHORT).show()
    }       
}

2) registerForActivityResult() 방법
API 31 버전에서 추가
val requestPermissionLauncher = registerForActivityResult(
    ActivityResultContracts.RequestPermission()
) { isGranted ->
    if (isGranted) {
         Toast.makeText(this, "permission granted", Toast.LENGTH_SHORT).show()
    } else {
         Toast.makeText(this, "permission denied", Toast.LENGTH_SHORT).show()
}        
}

 

실행 예) 
requestPermissionLauncher.launch(Manifest.permission.ACCESS_FINE_LOCATION)

728x90
LIST

관련글 더보기

댓글 영역