[안드로이드/Error] PendingIntent.FLAG_UPDATE_CURRENT 오류
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