권한 부여하기

미미·2023년 8월 20일
0

안드로이드

목록 보기
4/6

💡 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)
    }

0개의 댓글