Android

[안드로이드/Error] PendingIntent.FLAG_UPDATE_CURRENT 오류

gangmini 2023. 4. 14. 00:07
반응형

PendingIntent 객체 생성시, Flag 값을 주는데

액티비티를 띄울때 화면을 갱신해서 띄우고 싶을 때 기존에는 아래와 같이 FLAG_UPDATE_CURRENT 라는 플래그를 사용했다.

val pending1 = PendingIntent.getActivity(this, 10, intent1, PendingIntent.FLAG_UPDATE_CURRENT) // activity를 띄울 때 화면을 갱신해서 띄움

하지만 아래와 같은 에러가 뜨고 마는데...

 

[error 내용]

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

 

 

안드로이드 OS 가 12 이상이고, targetSDK 버전이 31 이상이면 발생하는 에러라고 한다.

내 환경도 api 33인 애뮬레이터를 사용하면서 발생하는 문제인 것 같다.

 

[해결 방법]

FLAG_IMMUTABLE 은 새로운 데이터가 담긴 pendingIntent 객체를 보내면 무시하고, FLAG_MUTABLE 는 변경 가능하다는 차이가 있다. 따라서 중간에 변경 사항을 반영하고 싶다면 기존에  FLAG_MUTABLE 플래그를 사용해 FLAG_UPDATE_CURRENT 와 동일한 기능을 구현할 수 있을 것이다. FLAG_MUTABLE 플래그는 기존에 없었는데 update_current 플래그가 사용을 지양하면서 대신해 생김

*그런데 어째서인지 FLAG_MUTABLE 로 플래그로 설정하면 액티비티로 intent data 전송이 불가능 하다. (그냥 default값이 전달)

일단 데이터를 보내고 싶으면 FLAG_IMMUTABLE 로 설정을 해줘야 할 것 같다.

val pending1 = PendingIntent.getActivity(this, 10, intent1, PendingIntent.FLAG_MUTABLE) // activity를 띄울 때 화면을 갱신해서 띄움

 

그리고 버전별로 분기해서 이전 플래그를 사용할지 안할지 다르게 설정할 수도 있다.

안드로이드는 진짜 버전별 분기가 중요한 것 같다.....

금방금방 deprecated 되고 없어지고...안드로이드 OS 에 보안 이슈가 많아서 그런걸까?..

더 자세한 내용은 아래 블로그에서 참고할 수 있다. 👍🏻

https://ddolcat.tistory.com/2393

 

[안드로이드] Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when crea

targetSdkVersion 31로 상향 조정하면서 여기저기서 오류가 튀어 나온다. 오류 내용은 다음과 같다. 2022-10-02 12:29:09.109 6268-6309/com.test E/AndroidRuntime: FATAL EXCEPTION: pool-9-thread-1 Process: com.test, PID: 6268 java.lan

ddolcat.tistory.com

 

반응형