Android 13 POST_NOTIFICATIONS

pass·2023년 3월 20일
0

Android

목록 보기
12/35

Android 에서 notification 기능을 사용하기 위해서는 Manifest에 권한을 추가해주지 않아도 된다.
하지만, Android 13 (API 33 이상) 부터는 알림을 사용하려면 런타임권한으로 POST_NOTIFICATIONS 를 추가해주어야한다.



경험

알람 앱을 만드는 과정에서 안드로이드 13 이상부터 알림이 가지 않는 것을 확인하였다. 이후에 API 33 이상부터 런타임 권한을 추가해주어야하는 것을 찾을 수 있었다.



사용 예제

1) Manifest 에 권한 추가

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

2) 사용자에게 권한 요청

// version check
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
            if (ContextCompat.checkSelfPermission(requireContext().applicationContext, Manifest.permission.POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED) {
                if (ActivityCompat.shouldShowRequestPermissionRationale(requireActivity(), Manifest.permission.POST_NOTIFICATIONS)) {
                    // 이미 권한을 거절한 경우 권한 설정 화면으로 이동
                    Toast.makeText(context, getString(R.string.plz_permit_notification_permission), Toast.LENGTH_SHORT).show()
                    val intent: Intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS).setData(Uri.parse("package:" + requireActivity().packageName))
                    startActivity(intent)
                    requireActivity().finish()
                } else {
                    // 처음 권한 요청을 할 경우
                    registerForActivityResult(ActivityResultContracts.RequestPermission()) {
                        when (it) {
                            true -> {
                                Toast.makeText(context, getString(R.string.permit_notifiation_permission), Toast.LENGTH_SHORT).show()
                            }
                            false -> {
                                Toast.makeText(context, getString(R.string.request_notification_permission), Toast.LENGTH_SHORT).show()
                                requireActivity().moveTaskToBack(true)
                                requireActivity().finishAndRemoveTask()
                                exitProcess(0)
                            }
                        }
                    }.launch(Manifest.permission.POST_NOTIFICATIONS)
                }
            }
        }

profile
안드로이드 개발자 지망생

0개의 댓글