기본적으로 일반적인 Intent의 "지연된" 또는 "예약된" 실행을 가능하게 합니다. 이를 통해 다른 앱이나 안드로이드 시스템이 애플리케이션이 실행 중이지 않을 때에도 특정 작업을 대신 실행할 수 있도록 합니다.
Intent
: 현재 사용중인 앱에서 컴포넌트간 메세지 전달 방식으로 사용됩니다. 즉, A라는 앱을 사용중이라면 A앱에서만 통신이 가능합니다.PendingIntent
: 특정 시점에(앱이 구동되고 있지 않을 때 등) Intent가 수행될 수 있게 보장합니다.
Intent
를 마치 본인 앱에서 실행되는 것 처럼 사용합니다.Intent
를 실행할 권한을 부여합니다.val requestCode: Int = Random().nextInt()
val intent: Intent = Intent(this, MainActivity::class.java)
val pendingIntent: PendingIntent = PendingIntent.getActivity(
this,
requestCode,
intent,
PendingIntent.FLAG_UPDATE_CURRENT
)
PendingIntent
를 참조하여 다음과 같은 컴포넌트를 호출할 수 있습니다. 메서드 이름에서 유추할 수 있듯이 다음과 같은 기능을 호출합니다.
Intent.FLAG_ACTIVITY_NEW_TASK
를 사용하여 호출해야합니다.PendingIntent의 flag는 PendingIntent의 생성 및 재사용 방식을 결정합니다.
PendingIntent
가 한 번 사용된 후에는 더 이상 사용될 수 없음을 나타냅니다. 사용 후에는 자동으로 취소됩니다.PendingIntent
를 생성하지 않고 기존의 PendingIntent
를 검색만 합니다. 만약 해당하는 PendingIntent
가 이미 존재하지 않으면 null
을 반환합니다.PendingIntent
를 취소하고 새로운 것을 생성합니다. 이는 기존의 데이터를 덮어쓰고 싶을 때 유용합니다.PendingIntent
가 있을 경우, 그 PendingIntent
의 내용을 새로운 Intent
의 내용으로 업데이트합니다. 이 플래그는 데이터를 최신 상태로 유지하고자 할 때 자주 사용됩니다.Android 12부터는 모든 PendingIntent에 FLAG_IMMUTABLE 또는 FLAG_MUTABLE 중 하나를 명시적으로 설정해야 합니다.
if (android.os.Build.VERSION.SDK_INT >= 23) {
// FLAG_IMMUTABLE을 사용하여 PendingIntent 생성
val intent = Intent(this, ExampleActivity::class.java)
val pendingIntent = PendingIntent.getActivity(
this,
0,
intent,
PendingIntent.FLAG_ONE_SHOT or PendingIntent.FLAG_IMMUTABLE
)
} else {
// PendingIntent를 생성하는 기존 코드
}