Intent는 메세징 객체이며, 다른 앱 구성요소(Activity, Service, Broadcast Receiver, Content Provider)에 작업(Action)을 요청하는데 사용한다(An Intent is a messaging object you can use to request an action from another app component). 간단한 예로, Activity에서 다른 Activity를 실행하거나, Service를 호출해 작업을 진행하는 등의 과정에서 Intent로 요청을 하는 것이다. Intent는 번들(Bundle)로 구성되는데 번들은 Parcelable을 구현한 데이터 객체라 생각하면 될 것 같다.
따라서 우리는 Intent에 전달하고 싶은 데이터를 담아서 다른 앱 구성요소로 전달하면 되는 것이다.
Intent는 명시적 인텐트와 암시적 인텐트로 구분되는데 자세한 내용은 아래의 링크를 참고하면 될 것이다.
PendingIntent는 Intent를 감싸는 래퍼 클래스며, 해당 PendingIntent를 Android 시스템에 위탁해 사용한다고 생각하면 될 것 같다. 주로 사용되는 곳은 알람(Notification), 위젯(Widget) 등이 있다.
여기서 위탁이라고 표현한 것은 우리가 알람이나 위젯을 관리하는 곳은 사용하는 앱이 아닌 시스템에서 관리하기 때문이다. 따라서 해당 Intent를 시스템에 등록하고 보류해놓다가 사용자가 알림 혹은 위젯과의 상호작용(업데이트, 클릭 등)에서 등록했던 Intent를 호출하여 원하는 작업을 할 수 있게 해주는 것이다.
PendingIntent에서의 주요 메서드
- getActivity() : Activity로 실행
- getService() : Service 실행
- getBroadcast() : Broadcast Receiver 실행
1. 알람에서의 PendingIntent 구현
NotificationCompat.Builder에서 setContentIntent()로 구현가능
class NotificationExam {
companion object {
private const val CHANNEL_ID = "MyChannel"
private const val REQUEST_CODE = 1771
}
fun getNotification(context: Context): Notification? {
return NotificationCompat.Builder(context, CHANNEL_ID).run {
setContentIntent(
PendingIntent.getActivity(
context,
REQUEST_CODE,
Intent(/** Set Intent */),
PendingIntent.FLAG_UPDATE_CURRENT
)
)
build()
}
}
}
2. 위젯에서의 PendingIntent 구현
RemoteViews에서 setOnClickPendingIntent()로 구현가능
class RemoteViewsExam {
companion object {
private const val REQUEST_CODE = 1771
}
fun getRemoteViews(context: Context): RemoteViews? {
return RemoteViews(packageName, R.layout.widget_example).apply {
setOnClickPendingIntent(
R.id.btn_click, PendingIntent.getActivity(
applicationContext,
REQUEST_CODE,
Intent(),
PendingIntent.FLAG_UPDATE_CURRENT
)
)
}
}
}
참고자료:
https://developer.android.com/guide/components/intents-filters
https://developer.android.com/reference/android/os/Bundle.html
'안드로이드 > Guide' 카테고리의 다른 글
안드로이드 개발 - (8) View의 Listener 활용 - OnClickListener, OnLongClickListener (0) | 2020.04.10 |
---|---|
안드로이드 개발 - (7) View, ViewGroup, Inflation의 개념 (0) | 2020.04.09 |
안드로이드 개발 - (6) Android Component: Content Providers (0) | 2020.03.06 |
안드로이드 개발 - (5) Android Component: Broadcast Receiver (0) | 2020.03.05 |
안드로이드 개발 - (4) Android Component: Service (0) | 2020.03.04 |