마시멜로우 버전(API 23) 이상 버전부터는 반드시 런타임 퍼미션(Runtime-permissions)을 이용해서 권한을 부여받아야합니다.
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()
}
}
}
}
권한은 명시해줘야 권한 요청 다이얼로그가 띄워진다.
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />