반응형
기존 안드로이드12 이하는 알림 권한 기본값이 활성화였는데, 안드로이드13부터는 기본값이 비활성화라고 한다.
따라서 Notification 권한을 요청하거나, 사용자가 직접 알림 설정에 들어가서 활성화를 해야 한다.
Notification권한은 targetSdk33이상에서만 권한 추가 요청이 가능하다.
targetSdk31로 되어 있던 프로젝트를 targetSdk33으로 올리기로 하였다. (진작했어야했는데...)
그리고, 알림 설정 팝업을 띄워주는 코드를 추가하였다.
1. build.gradle 에서 targettSdk33, compileSdk33으로 변경
2. manifest 에서 POST_NOTIFICATION 퍼미션 추가
<uses-permission android:name="android.permission.POST_NOTIFICATION"/>
다행히 크게 변경할 코드가 없어서 sync만 맞춰주었다.
3. 알림권한이 설정되어있지 않으면 알림 권한 요청을 한다. (안드로이드 13이상인 경우)
if ( // 알림 권한 없을 경우
ContextCompat.checkSelfPermission(
requireContext(),
Manifest.permission.POST_NOTIFICATIONS
) != PackageManager.PERMISSION_GRANTED
) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
requestNotificationPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS)
} else {
// 안드로이드 12 이하는 알림에 런타임 퍼미션X
viewModel.getSettingInfo()
}
}else{
// 권한요청X
}
4. 알림권한을 허용하지 않을 경우 시스템 설정페이지로 이동시키는 다이얼로그를 띄운다. (사전에 커스텀해놓은 다이얼로그 창 사용)
private val requestNotificationPermissionLauncher =
registerForActivityResult(
ActivityResultContracts.RequestPermission()
) { ok ->
if (ok) {
// 알림권한 허용 o
} else {
// 알림권한 허용 x. -> 설정페이지로 넘어가는 다이얼로그 띄우기
CustomDialog(DialogTextType.REQUEST_SETTING_ON,
listener = object : DialogClickListener {
override fun positiveAct() {
val intent = Intent()
intent.action = Settings.ACTION_APP_NOTIFICATION_SETTINGS
intent.putExtra(Settings.EXTRA_APP_PACKAGE, context!!.packageName)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
startActivity(intent)
isNotFirst = true
}
}).show(requireActivity().supportFragmentManager, "")
}
}
참고
https://developer.android.com/develop/ui/views/notifications/notification-permission
'IT > Android' 카테고리의 다른 글
안드로이드 스튜디오 / SOFT_INPUT_ADJUST_RESIZE deprecated (0) | 2023.04.07 |
---|---|
안드로이드 스튜디오 / Appsflyer onelink 적용방법 (0) | 2023.04.06 |
Hilt 오류? (0) | 2023.03.22 |
맥 zsh: command not found: adb 오류 (0) | 2023.02.24 |
안드로이드 스튜디오 / 4대 컴포넌트 (구성요소) (0) | 2022.06.20 |