Android 12에서는 알림이 변경되어 PendingIntent를 생성할 때 FLAG_MUTABLE 또는 FLAG_IMMUTABLE을 지정해야 합니다.
그렇지 않으면 알림의 일부 속성을 업데이트할 때 예외가 발생할 수 있습니다.
이번 포스팅에서는 이러한 문제를 해결할 수 있는 방법을 찾아보도록 하겠습니다.
1. FLAG_IMMUTABLE 또는 FLAG_MUTABLE이란 무엇입니까?
FLAG_IMMUTABLE 또는 FLAG_MUTABLE은 PendingIntent의 플래그입니다.
PendingIntent는 다른 애플리케이션이나 시스템이 액세스할 수 있는 항목을 제어하는 데 사용됩니다.
FLAG_IMMUTABLE은 PendingIntent가 생성될 때 읽기 전용으로 설정되고 FLAG_MUTABLE은 PendingIntent가 생성될 때 쓰기 가능으로 설정됩니다.
2. 문제 해결 방법
FLAG_IMMUTABLE 또는 FLAG_MUTABLE을 사용하여 PendingIntent를 만들 수 있습니다.
API 레벨 30 이전에는 FLAG_IMMUTABLE이 설정되지 않는 한 PendingIntent는 기본적으로 변경 가능했습니다.
그러나 API 레벨 31부터 PendingIntent를 사용할 때 FLAG_IMMUTABLE 또는 FLAG_MUTABLE을 FLAG 변수로 사용하여 PendingIntent를 사용할 때 변경 가능성을 명시적으로 지정해야 합니다(개발자 문서에는 엄격하게 필요한 경우가 아니면 FLAG_IMMUTABLE이 사용됨).
3. 어떻게 신청하나요?
FLAG_MUTABLE 또는 FLAG_IMMUTABLE 플래그로 PendingIntent를 생성하려면 PendingIntent를 생성하는 모든 코드에서 플래그를 추가해야 합니다.
가장 쉬운 방법은 PendingIntent를 생성하는 메서드에 플래그를 추가하는 것입니다.
예를 들어 NotificationCompat.Builder를 사용하여 알림을 만들 때 다음과 같이 PendingIntent.FLAG_MUTABLE 플래그를 추가할 수 있습니다.
val intent = Intent(context, MyBroadcastReceiver::class.java)
val pendingIntent = PendingIntent.getBroadcast(context, requestCode, intent, PendingIntent.FLAG_MUTABLE)
val builder = NotificationCompat.Builder(context, channelId)
.setContentTitle(title)
.setContentText(text)
.setSmallIcon(icon)
.setContentIntent(pendingIntent)
.setAutoCancel(true)
.build()
NotificationManagerCompat.from(context).notify(notificationId, builder)
4. 또 다른 해결 방법
위의 방법이 작동하지 않으면 App Gradle의 종속 항목에 라이브러리를 추가할 수 있습니다.
implementation 'androidx.work:work-runtime-ktx:2.7.0'
5. 결론
FLAG_IMMUTABLE 또는 FLAG_MUTABLE을 사용하여 PendingIntent를 만들지 않으면 알림이 변경될 때 Android 12에서 예외가 발생할 수 있습니다.
FLAG_MUTABLE 또는 FLAG_IMMUTABLE로 PendingIntent를 생성할 수 있으며, NotificationCompat.Builder로 PendingIntent를 생성할 때 플래그를 추가할 수 있습니다.
이를 통해 Android 12에서 예기치 않은 예외를 방지할 수 있습니다.