[PendingIntent/LaunchMode] 알림 받고 활동 시작!

최대 1 분 소요

👩🏻‍💻 활동의 구분

AlarmManager와 Broadcast Reciever를 활용해 알림을 생성하고 받았다면, 알림을 눌렀을 때 PendingIntent를 활용해 새로운 활동을 정의할 수 있다. 활동은 크게 다음 두가지로 구분되며, 그에 따라 공식 문서 가이드를 따라하면 된다.

1. 일반 활동

앱의 일반 ux 흐름의 일부로 존재하는 활동, 즉, 활동에 백 스택이 포함되어 있어야 한다.

2. 특수 활동

알림에서 시작할 때만 해당 활동을 볼 수 있다. 즉, 백 스택을 포함하지 않으며, 알림 자체에서 제공하기 어려운 추가 정보를 제공하게 된다.


👩🏻‍💻 알림으로 fragment를 시작할 순 없을까?

필자의 경우, 알림을 클릭했을 떄 특정 fragment로 이동했어야 했다. 그렇다면 pendingIntent를 통해 fragment로 이동할 순 없을까?

구글링을 해본 결과, 직접 fragment로 화면 전환을 할 수 없다. 따라서 fragment로 전환하고자 한다면 해당 fragment를 포함하는 activity로 전환한 후, 원하는 fragment로 전환을 처리해야 한다.

activity로 전환하는 것은 pendingIntent의 getActivity를 활용할 수 있다.

            val mainIntent = Intent(this, MainActivity::class.java)
            mainIntent.putExtra("preorderId", preorderId)
            PendingIntent.getActivity(
                this,
                UUID.randomUUID().hashCode(),
                mainIntent,
                PendingIntent.FLAG_IMMUTABLE
            ).send()


👩🏻‍💻 액티비티가 두 번 생성되는 현상?

pendingIntent를 통해 getActivity를 활용할 경우, 새로운 activity가 생성된다. 그렇다면 해당 activity가 실행되고 있다면 새로운 액티비티를 생성하지 않고, 기존 액티비티를 사용할 순 없을까?

이때 활용할 수 있는 것이 launchMode이다. 다음 게시글에서 각 launchMode에 대해 자세히 다루고 있다! 필자는 그 중 singleInstance를 적용해 해당 문제를 해결할 수 있었다.


👩🏻‍💻 참고

댓글남기기