컴공과컴맹효묘의블로그

Android- Permisson 본문

컴퓨터/Android Studio

Android- Permisson

효묘 2022. 3. 2. 00:56
반응형

permission 설정 방법

<permision android:name="com.example.permission.MY_PERMISSION"
    android:label="My Permission"
    android:description="@string/permission_desc"
    android:protectionLevel="dangerous" />

보호하려는 컴포넌트에 android:permission 삽입.

<activity ... android.permission="..."
...

protectionLevel의 값

  • normal: 낮은 수준의 보호.
  • dangerous: 높은 수준의 보호. 사용자에게 권한 요청 필요.
  • signature: 같은 키로 인증한 앱만 실행.
  • signatureOrSysyem: signature 혹은 안드로이드 시스템앱만 실행.

use-permission

AndroidManifest.xml 파일 manifest태그 바로 밑에 작성한다.

<use-permission android:name="android.permission.CAMERA" />
<use-permission android:name="android.permission.ACCES_FINE_LOCATION />
  • ACCESS_FINE_LOCATION: 위치 정보 접근
  • ACCESS_NETWORK_STATE: 네트워크 정보 접근
  • ACCESS_WIFI_STATE: 와이파이 네트워크 정보 접근
  • BATTERY_STATUS: 배터리 정보 접근
  • BLUTOOTH: 블루트스 장치에 연결
  • BLUTOOTH_ADMIN: 블루투스 장치를 검색하고 페어링
  • CAMERA: 카메라 장치 접근
  • INTERNET: 인터넷 연결
  • READ_EXTERNAL_STORAGE: 외부 저장소에서 파일 읽기
  • WRITE_EXTERNAL_STORAGE: 외부 저장소에서 파일 쓰기
  • READ_PHONE_STATE: 전화기 정보 접근
  • SEND_SMS: 문자 메시지 발신
  • RECEIVE_SMS: 문자 메시지 수신
  • RECEIVE_BOOT_COMPLETED: 부팅 완료시 실행
  • VIBRATE: 진동 울리기

check permission

퍼미션 허용 확인 함수

open static fun checkSelfPermission(
    @NonNull context: Context,
    @NonNull permission: String
): Int

반환 값은

  • PackageManager.PERMISSION_GRANTED
  • PackageManager.PERMISSION_DENIED
    중 하나로 반환한다.
val status = ContextCompat.checkSelfPermission(this, "android.permission.ACCESS_FINE_LOCATION")

if (status == PackageManager.PERMISSION_GRANTED) {
    TODO() // Permission granted!
} else {
    TODO() // Permission denied
}

ContextCompat은 resource에서 값을 가져오거나 permission을 확인할 때 sdk버전을 내부적으로 처리해둔 클래스이다.

request permission- 퍼미션 요청

ActivityResultLauncher를 이용한다. 이 클래스는 퍼미션 요청이나 다른 액티비티를 실행하고 결과를 돌려 받을 때 등등 사용된다.

위 객체는 registerForActivityResult()함수를 호출해서 만든다.

registerForActivityResult()함수

public final <I, O> ActivityResultLauncher<I> registerForActivityResult(
    @NonNull ActivityResultContract<I, O> contract,
    @NonNull ActivityResultCallback<O> callback)

첫 번째 매개변수는 어떤 요청인지를 나타내는 ActivityResultContract타입 객체이며 다양한 요청에 대응하는 서브 클래스들이 있다. 예를 들어 퍼미션 요청에는 RequestPermission, 다른 액티비티를 실행하고 결과를 돌려받을 때는 StartActivityForResult가 있다.

두 번째 매개변수는 결과를 받았을 때 실행하는 callback함수.

val requestPermissionLauncher = registerForActivityResult(  
    ActivityResultContracts.RequestPermission()  
) {  
    if(it) {  
        Log.d("callback", "granted!")  
    } else {  
        Log.d("callback", "denied.")  
    }  
}

requestPermissionLauncer.launch("android.permission.ACCESS_FINE_LOCATION")
반응형

'컴퓨터 > Android Studio' 카테고리의 다른 글

Android- 액션바ActionBar와 툴바Toobar  (0) 2022.03.03
Android- 플랫폼API, 제트팩 라이브러리  (0) 2022.03.03
Android- platfrom architecture  (0) 2022.03.03
Android- viewBinding  (0) 2022.03.02
Kotlin  (0) 2022.03.01
Comments