티스토리 뷰

728x90

 


권한

• 애플리케이션이 안드로이드의 특정 기능을 사용하려면 허락을 받아야 한다.

 

1. 일반 권한

• manifest에 등록만 하면 사용자에게 따로 물어보지 않아도 기능을 사용할 수 있다.

 

2. 위험 권한

• 사용자에게 직접 권한을 요청한다.

• 주로 개인 정보에 관련된 권한은 위험 권한이 많다.

 

* API 버전에 따라 권한의 등급이 다르다.

 

• AndroidManifest.xml

     - <uses-permission> 태그로 권한을 받는다.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.example.fastcampus">

    <uses-permission android:name="android.permission.CAMERA" />

    <application>
        ...생략...
    </application>

</manifest>

 

• activity_permission27.xml

     - 권한을 요청할 버튼 생성

<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".Permission_27">

    <TextView
        android:id="@+id/askPermission"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:background="#99DDFF"
        android:gravity="center"
        android:text="권한 요청"
        android:textSize="40dp" />

</androidx.appcompat.widget.LinearLayoutCompat>

 

• Permission_27.kt

package com.example.fastcampus

import android.content.pm.PackageManager
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.TextView
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat

class Permission_27 : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_permission27)

        findViewById<TextView>(R.id.askPermission).setOnClickListener {
            val hasCameraPermission = ContextCompat.checkSelfPermission( // 카메라 권한이 있는지 확인
                this,
                android.Manifest.permission.CAMERA
            )
            if (hasCameraPermission != PackageManager.PERMISSION_GRANTED) { // 권한이 없는 경우
                // 권한 요청(이유도 함께 설명하면 좋다.)
                ActivityCompat.requestPermissions(
                    this,
                    arrayOf(android.Manifest.permission.CAMERA),
                    1000
                )
            } else { // 권한이 있는 경우
                // 카메라 기능 실행
                Log.d("testt", "카메라 권한 있음")
            }
        }
    }

    override fun onRequestPermissionsResult( // 권한 요청의 결과를 받는다.
        requestCode: Int,
        permissions: Array<out String>,
        grantResults: IntArray
    ) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
        if(requestCode == 1000) { // 우리가 요청했던 카메라 권한에 대한 결과가 왔다면
            if(grantResults[0] == PackageManager.PERMISSION_GRANTED) { // 권한 요청이 승인되면
                Log.d("testt", "카메라 권한 승인")
            } else { // 권한 요청이 거부되면
                // 권한이 필요한 이유를 설명하거나 다시 요청을 하는 것이 좋음.
                Log.d("testt", "카메라 권한 거부") 
            }
        }
    }
}

 

 

 

 

 

 

 

 

 

 

이 글은

패스트 캠퍼스 Android 앱 개발의 정석 with Kotlin 올인원 패키지 Online

강의를 듣고 공부한 내용을 바탕으로 작성되었습니다.

 


728x90
댓글
공지사항