Notice
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 멤버변수
- 서비스 vs 쓰레드
- 큐 자바 코드
- jvm 작동 원리
- android retrofit login
- rxjava hot observable
- Rxjava Observable
- 2022 플러터 안드로이드 스튜디오
- 안드로이드 유닛 테스트 예시
- 안드로이드 라이선스
- jvm이란
- 스택 자바 코드
- 스택 큐 차이
- rxjava disposable
- 안드로이드 유닛테스트란
- 안드로이드 레트로핏 crud
- 2022 플러터 설치
- ar vr 차이
- 객체
- 안드로이드 유닛 테스트
- android ar 개발
- 안드로이드 라이선스 종류
- 서비스 쓰레드 차이
- 플러터 설치 2022
- 안드로이드 os 구조
- ANR이란
- 클래스
- rxjava cold observable
- 안드로이드 레트로핏 사용법
- 자바 다형성
Archives
- Today
- Total
나만을 위한 블로그
[Android] Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent 에러 해결 본문
Android
[Android] Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent 에러 해결
참깨빵위에참깨빵 2022. 4. 29. 18:25728x90
반응형
내용 작성에 앞서 내가 사용하는 안드로이드 스튜디오 버전은 아래와 같으니 참고하자.
제목의 에러가 너무 길어서 첫 번째 온점을 기준으로 잘랐다. 에러 원문은 아래와 같다.
Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent. Strongly consider using FLAG_IMMUTABLE, only use FLAG_MUTABLE if some functionality depends on the PendingIntent being mutable, e.g. if it needs to be used with inline replies or bubbles.
뭔 소린지 모르겠으니 한글로 바꿔보자.
S+(버전 31 이상)를 타겟팅하려면 PendingIntent를 생성할 때 FLAG_IMMUTABLE 또는 FLAG_MUTABLE 중 하나를 지정해야 합니다. FLAG_IMMUTABLE 사용을 강력히 고려하고 일부 기능이 변경 가능한 PendingIntent에 의존하는 경우에만 FLAG_MUTABLE을 사용하십시오. 인라인 회신이나 말풍선과 함께 사용해야 하는 경우.
이 에러는 코틀린 안드로이드 프로젝트에 FCM을 붙이면서 발생했다. 범블비 이전에 사용하던 버전에선 나오지 않았는데, 범블비로 바꾸면서 타겟 SDK가 32가 되니 이런 에러가 발생한다.
해결 방법은 앱 수준 gradle에 아래 의존성을 추가하는 것이다.
// 자바를 쓰는 경우
implementation 'androidx.work:work-runtime:2.7.1'
// 코틀린을 쓰는 경우
implementation 'androidx.work:work-runtime-ktx:2.7.1'
만약 이걸 추가해도 해결되지 않는다면 MyFirebaseMessagingService 파일에 아래 코드를 추가해보자.
자바 형태로 작성돼 있으니 코틀린 형태로 바꿔야 한다. 코틀린 프로젝트에 그대로 복붙하면 알아서 코틀린으로 변환된다.
PendingIntent pendingIntent = PendingIntent.getActivity(this, alarmID, notificationIntent, PendingIntent.FLAG_IMMUTABLE);
내 경우는 getActivity()의 마지막 인자를 아래 것으로 사용하는데 이걸 써도 별다른 에러는 발생하지 않았다.
val pendingIntent = PendingIntent.getActivity(this, 0, /* Request code */ intent, PendingIntent.FLAG_ONE_SHOT)
반응형
'Android' 카테고리의 다른 글
Comments