일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- high order function
- Fragment에서 Activity의 함수 사용하기
- viewholder
- 안드로이드13
- 스와이프
- 고차함수
- 테마 아이콘
- IntentTestRule
- recyclerview
- Fragment 수동 추가
- binding adapter
- 생명주기
- 뷰변경 감지
- 코딜리티
- espresso
- 안드로이드스튜디오
- 안드로이드
- Error:Execution failed for task ':app:mergeDebugResources'
- adapter
- 구분선
- ActivityTestRule
- 리사이클러뷰
- fragment
- ui test
- 코틀린
- Android
- 재사용
- searchview
- LayoutManger
- 안드로이드개발레벨업교과서
Archives
- Today
- Total
룬아님의 취중코딩
Target SDK 31 수정 이후 Widget에서 발생하는 크래시 이슈 본문
동작 변경사항: 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);
반응형
'개발 > 안드로이드 개발' 카테고리의 다른 글
안드로이드13 테마 앱 아이콘 대응 (0) | 2023.02.14 |
---|---|
외부 라이브러리에서 NoClassDefFoundError 발생하였을 때 (0) | 2022.11.25 |
안드로이드 12 대응 (0) | 2022.10.07 |
라이브러리 모듈을 aar로 implementation 하였을 때 작동안하는 이슈 (0) | 2022.09.06 |
안드로이드 딥링크 테스트 (0) | 2022.04.11 |
Comments