티스토리 뷰
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
    
    
  '📱 Android > 💡 개념' 카테고리의 다른 글
| [Android/개념] 23. Network (0) | 2022.11.11 | 
|---|---|
| [Android/개념] 22. Room (0) | 2022.11.10 | 
| [Android/개념] 21. SharedPreferences (0) | 2022.11.10 | 
| [Android/개념] 20. Database(데이터베이스) (0) | 2022.11.09 | 
| [Android/개념] 19. ViewPager & TabLayout (0) | 2022.11.09 | 
					댓글
						
					
					
					
				
			
										공지사항
										
								
							250x250
    
    
  