룬아님의 취중코딩

Target SDK 31 수정 이후 Widget에서 발생하는 크래시 이슈 본문

개발/안드로이드 개발

Target SDK 31 수정 이후 Widget에서 발생하는 크래시 이슈

룬아님 2022. 10. 28. 18:37
 

동작 변경사항: Android 12를 타겟팅하는 앱  |  Android Developers

Android 12를 타겟팅하는 앱에 영향을 주는 Android 12의 변경사항을 알아봅니다.

developer.android.com

31 동작 변경 사항에 의하여 widget에서 사용하는 PendingIntent의 flag에 일괄적으로

PendingIntent.FLAG_IMMUTABLE

을 넣어주었다.

배포 이후 Caused by java.lang.NullPointerException이 발생하기 시작하였고 원인은 무지성으로 넣어준 IMMUTABLE flag 때문이었다.

Widget의 ListView의 경우 setPendingIntentTemplate을 통하여 PendingIntent를 넘겨주고 RemoteViewsService를 통하여 해당 Intent를 수정하여 broadcast를 발송한다.

이때문에 ListView 위젯에서 사용할 PendingIntent는 Mutable로 설정해주어야 한다.

int flag;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
    flag = PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_MUTABLE;
} else {
    flag = PendingIntent.FLAG_CANCEL_CURRENT;
}

PendingIntent PI = PendingIntent.getBroadcast(context, appWidgetIds[i], new Intent(context, getClass()), flag);
반응형
Comments