일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Android Jetpack
- Android DataBinding
- Android 12 대응
- Android ViewPager2
- 안드로이드 fcm
- 안드로이드 갤러리 접근
- Java
- DataBinding
- Android ProgressBar
- 습관만들기
- 영어독립365
- 66챌린지
- Android Interceptor
- WebView
- android recyclerview
- MVP Architecture
- Android WebView
- 영어공부
- Android
- OkHttp Interceptor
- Kotlin FCM
- Android Navigation
- 알고리즘 자바
- scope function
- 안드로이드
- 안드로이드 카카오 로그인
- Android 12
- Kotlin
- 카카오 알고리즘
- 프로그래머스 알고리즘
- Today
- Total
Developer Geek
[Android] PnedingIntent Mutability 본문
PendingIntent Mutability
안드로이드 앱의 targetSdk 버전이 12
라면 무조건 PendingIntent
객체에 mutability를 명시해야한다.
PendingIntent 란
class PendingIntent: Parcelable
공식문서에는 다음과 같이 설명되어있다.
A description of an Intent and target action to perform with it. Instances of this class are created with getActivity, getActivities,
getBroadcast and getService; the returned object can be handed to other applications so that they can perform the action you described on your
beharlf at a later time...
자세한 설명은 아래 글에 정리되어있다.
Mutability
PendingIntent
에 mutabiliy를 명시하기 위해서는 PendingIntent.FLAG_MUTABLE
or PendingIntent.FLAG_IMMUTABLE
flag를 사용하면 된다.
만약 PendingIntent
를 생성하는데 mutability를 명시하지 않았다면 시스템에서 IllegalArgumentException
을 던지고 아래와 같은 Locat Message가 보일 것이다.
PACKAGE_NAME: 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.
Immutable PendingIntent 만들기
대부분의 경우 아래와 같이 immutable PendingIntent
을 만들것이다. PendingIntent
가 imuutable한 경우에는 다른 앱에서 해당 intent를 수정할 수 없다.
val pendingIntent = PendingIntent.getActivity(applicationContext, REQUEST_CODE, intent, PendingIntent.FLAG_IMMUTABLE)
Mutable PendingIntent 만들기
val pendingIntent = PendingIntent.getActivity(applicationContext, REQUEST_CODE, intent, PendingIntent.FLAG_MUTABLE)
다음과 같은 경우에는 mutable한 PendingIntent
가 필요하다.
- 직접적인 응답 액션이 포함된 Notification.
- 직접적인 응답은
PendingIntent
의 클립 데이터를 수정할 필요가 있기 때문에 mutable한PendingIntent
를 사용해야한다. - 예를 들면, 문자 메시지가 왔을 때 노티피케이션(알림)에서 직접 답장을 작성하는 것이 직접적으로 응답하는 경우다.
- 직접적인 응답은
Car App Extender
객체를 사용과 관련있는 NotificationrequestLocationUpdates()
를 사용하거나 비슷하게 디바이스의 위치 정보를 호출하는 API를 사용하는 경우.- mutable
PendingIntent
를 사용함으로써 시스템에서location lifecycle event
정보들을 intent extra에 추가할 수 있다.
- mutable
AlarmManager
를 사용하는 스케줄링 알람.- mutable
PendingIntent
를 사용함으로써 시스템에서EXTRA_ALARM_COUNT
정보를 intent extra에 추가할 수 있다.
- mutable
질문과 잘못된 점에 대해 말씀해주시는 건 언제나 환영입니다.
zero5.two4@gmail.com
'안드로이드 > Android 12(targetSdk 31)' 카테고리의 다른 글
[Android] Android 12: Safer Component Exporting 대응 (0) | 2022.10.15 |
---|---|
[Android] Android 12 SplashScreen API 변경사항 (1) | 2022.08.28 |