일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- high order function
- ui test
- 안드로이드개발레벨업교과서
- 코틀린
- adapter
- 생명주기
- 안드로이드13
- binding adapter
- 안드로이드스튜디오
- 코딜리티
- ActivityTestRule
- 구분선
- Fragment에서 Activity의 함수 사용하기
- 뷰변경 감지
- LayoutManger
- 안드로이드
- espresso
- 재사용
- 테마 아이콘
- 고차함수
- Fragment 수동 추가
- fragment
- Error:Execution failed for task ':app:mergeDebugResources'
- 스와이프
- searchview
- Android
- IntentTestRule
- viewholder
- recyclerview
- 리사이클러뷰
Archives
- Today
- Total
룬아님의 취중코딩
Target SDK 31 수정 이후 Widget에서 발생하는 크래시 이슈 본문
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