[Android] Targeting


[Android] Targeting 1

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에서 예기치 않은 예외를 방지할 수 있습니다.