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