본문 바로가기

안드로이드

[안드로이드] PendingIntent란?

PendingIntent

PendingIntent는 Intent를 갖고 있는 클래스이다. 기본적으로 다른 애플리케이션(프로세스)에서 PendingIntent를 생성한 앱을 대신하여 액티비티를 실행하는 등 기술한 작업을 수행할 수 있도록 하는게 가능하다. 즉, 다른 앱에 PendingIntent 를 제공하면 다른 앱이 동일한 권한을 소유하는 것 처럼 지정한 작업을 수행할 수 있게 된다.

 

실제 사용 예시

설명만으로는 이해하기 어려울 수 있으므로 자세한 예시를 들면 다음과 같다.

  • Notification을 생성할 때 PendingIntent를 전달해주어 Notification을 통해 Intent를 실행하도록 하는 것이 가능하다.
  • AlarmManager를 통해 특정 시점에 어떤 작업을 수행해야 할 때 PendingIntent를 전달할 수 있다.

기본적으로 Notification은 NotificationManager가 관리하여 생성하고 AlarmManager의 작업 또한 그렇다. 그렇기 때문에 해당 프로세스에서 우리가 개발한 앱의 액티비티나 서비스 등을 실행시키는 동작을 하기 위해서는 PendingIntent를 전달해주어야 한다.

 

PendingIntent's FLAG

PendingIntent를 생성할 때 여러 FLAG 옵션이 존재한다. 옵션 별 설명은 다음과 같다.

  • FLAG_CANCEL_CURRENT: 이전에 생성한 PendingIntent는 취소하고 새로 만든다.
  • FLAG_IMMUTABLE: 생성 할 PendingIntent를 수정 불가능하게 한다.
  • FLAG_NO_CREATE: 이전에 생성한 PendingIntent가 있다면 재사용하고 없다면 null을 반환한다.
  • FLAG_CANCEL_CURRENT: 해당 PendingIntent는 일회성이다.
  • FLAG_UPDATE_CURRENT: 기존에 PendingIntent가 존재하면 해당 Intent의 Extra Data를 새 값으로 갱신한다.