본문 바로가기
카테고리 없음

[Android] 권한 요청하기

by meteorfish 2023. 6. 4.
728x90

* 카메라 사용 요청 만들기

1. Manifest.xml 파일 수정하기

// 카메라 사용 요청
<uses-permission android:name="android.permission.CAMERA"/>

2. 요청을 결과를 받을 Launcher 변수 생성

private val cameraResultLauncher : ActivityResultLauncher<String> =
	registerForActivityResult(
		ActivityResultContracts.RequestPermission()){
			isGranted->
			// 승인 시,
            if(isGranted){
				//Toast.makeText...
            // 거부 시
			else
				//Toast.makeText...
		}

3. 버튼 클릭 시, 활성화 되도록 설정

btn.setOnClickListener {
	// 해당 버전과 호환되는 지 확인 및 요청 거부 시,
	if(Build.VERSION.SDK_INT>= Build.VERSION_CODES.M &&
		shouldShowRequestPErmissionRationale(Manifest.permission.CAMERA)){
	// 엑세스 안됐을 때, 권한 필요한 이유 다이얼로그로 쓰기
		showRationaleDialog("Permission Demo requires camera access",
			"Camera cannot be used because Camera access is denied")
	} else {
		cameraResultLauncher.launch(Manifest.permission.CAMERA)
	}
}

* 카메라 및 위치 사용 만들기

1. Manifest.xml 파일 수정하기

// 카메라 사용 요청
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

- ACCESS_FINE_LOCATION: 정확한 위치

- ACCESS_COARSE_LOCATION: 대략적인 위치

- 위치 요청 뜨면, 그곳에서 선택 가능

 

2. 요청을 결과를 받을 Launcher 변수 생성

private val cameraAndLocationResultLauncher : ActivityResultLauncher<Array<String>> =
	registerForActivityResult(
		ActivityResultContracts.RequestMultiplePermissions()){
			permissions ->
			permissions.entries.forEach{
				val permissionName = it.key // 권한 명
				val isGranted = it.value    // 권한 여부
				if(isGranted){
					if(permissionName == Manifest.permission.ACCESS_FINE_LOCATION){
						Toast.makeText...
					}else {
					Toast.makeText...
					}	
				} 			
			}
		}

- 반환 타입을 Array<String>으로 변경

- RequestMultiplePermissions()로 여러 권한 요청

- 이때 Permissions은 Map이기 때문에, key는 권한 명이고, value는 권한 여부이다.

 

3. 버튼 클릭 시, 활성화 되도록 설정

btn.setOnClickListener {
	if(Build.VERSION.SDK_INT>= Build.VERSION_CODES.M &&
		shouldShowRequestPErmissionRationale(Manifest.permission.CAMERA)){
	// 엑세스 안됐을 때, 권한 필요한 이유 다이얼로그로 쓰기
		showRationaleDialog("Permission Demo requires camera access",
			"Camera cannot be used because Camera access is denied")
	} else {
		cameraAndLocationResultLauncher.launch(
			arrayOf(Manifest.permission.CAMERA,
				Manifest.permission.ACCESS_FINE_LOCATION
				Manifest.permission.ACCESS_COARSE_LOCATION
			)
		)
	}
}

- Location 관련 권한을 구분하자

728x90