Permission

sumi Yoo·2022년 11월 22일
0

Permission

런타임 퍼미션


마시멜로우 버전(API 23) 이상 버전부터는 반드시 런타임 퍼미션(Runtime-permissions)을 이용해서 권한을 부여받아야합니다.

  • 매니페스트 파일에 필요한 권한 선언하기
  • 권한이 필요한 이유를 사용자에게 알리기 위해 UI 표현하기
  • 승인 요청 후 사용자의 승인을 기다리기
  • 권한이 이미 승인되어 있는 상태일 경우

권한을 요청할 때 사용하는 메소드

  • 권한을 가지고 있는지 체크하는 메소드
    ActivityCompat.checkSelfPermission(Context, String)
  • 권한을 요청하는 메소드
    ActivityCompat.requestPermissions(Activity, String[], int)
  • 권한 요청 결과를 확인받는 콜백 메소드
    ActivityCompat.OnRequestPermissionsResultCallback

권한 체크 함수

private fun checkPermissions() {
        // API 31 부터 알림 권한 받아야함
        // 이전 버전에서는 알림 권한은 자동으로 부여됨.
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
            if (ActivityCompat.checkSelfPermission(
                    this,
                    Manifest.permission.POST_NOTIFICATIONS
                ) != PackageManager.PERMISSION_GRANTED // 권한이 부여되지 않았다면
            ) {
                ActivityCompat.requestPermissions( // 권한 요청
                    this,
                    arrayOf(Manifest.permission.POST_NOTIFICATIONS),
                    PromiseSettingActivity.PERMISSIONS_REQUEST
                )
            }
        }
    }

권한 요청 결과 받기

override fun onRequestPermissionsResult(
        requestCode: Int,
        permissions: Array<out String>,
        grantResults: IntArray
    ) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
        when (requestCode) {
            PromiseSettingActivity.PERMISSIONS_REQUEST -> {
                if (grantResults.isNotEmpty() && grantResults[0] != PackageManager.PERMISSION_GRANTED) {
                    // 권한 거부 시 "권한 설정 풀어달라" 는 스낵바 띄움
                    Snackbar.make(binding.root, R.string.start_item_notification_permission, Snackbar.LENGTH_SHORT).show()
                }
            }
        }
    }

Manifest 선언

권한은 명시해줘야 권한 요청 다이얼로그가 띄워진다.

<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />

0개의 댓글