💡 RECORD_AUDIO 권한을 부여하는 예제로 권한 부여하는 방법 알아보기
1. 녹음 시작전 권한 확인하기
when{
// 권한확인
ContextCompat.checkSelfPermission(
this, // this == context
android.Manifest.permission.RECORD_AUDIO
) == PackageManager.PERMISSION_GRANTED ->{
// 실제로 녹음 시작하면 됨
}
// 권한요청을 했는데 취소한적이 있는 경우
ActivityCompat.shouldShowRequestPermissionRationale(this,android.Manifest.permission.RECORD_AUDIO ) -> {
// 사용자지정 권한요청 다이얼로그
showPermissionRationalDialog()
}
// 권한을 부여 받지 않은경우
else -> {
ActivityCompat.requestPermissions(
this,
arrayOf(android.Manifest.permission.RECORD_AUDIO),
REQUEST_RECORD_AUDIO_CODE)
}
}
private fun showPermissionRationalDialog() {
AlertDialog.Builder(this)
.setMessage("녹음 권한을 켜주셔야지 앱을 정상적으로 사용할 수 있습니다.")
.setPositiveButton("권한 허용하기"){_,_ ->
ActivityCompat.requestPermissions(this,
arrayOf(android.Manifest.permission.RECORD_AUDIO),
REQUEST_RECORD_AUDIO_CODE)
}.setNegativeButton("취소"){ dialogInterface, _ -> dialogInterface.cancel()}
.show()
}
2. 위의 권한요청 결과에 따른 실행함수 구현
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,
grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
val audioRecordPermissionGranted = requestCode == REQUEST_RECORD_AUDIO_CODE
&& grantResults.firstOrNull() == PackageManager.PERMISSION_GRANTED
if(audioRecordPermissionGranted){
//todo 녹음 작업을 시작함
}else{
if (ActivityCompat.shouldShowRequestPermissionRationale(this,android.Manifest.permission.RECORD_AUDIO )){
showPermissionRationalDialog()
} else{
// 권한요청 했지만 취소했을경우 -> 설정으로 가서 권한받기
showPermissionSettingDialog()
}
}
}
private fun navigateToAppSetting() {
val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS).apply{
// 우리앱의 디테일 세팅으로 감
data = Uri.fromParts("package",packageName,null)
}
startActivity(intent)
}