티스토리 뷰
Stack Overflow에 자주 검색, 등록되는 문제들과 제가 개발 중 찾아 본 문제들 중에서 나중에도 찾아 볼 것 같은 문제들을 정리하고 있습니다.
Stack Overflow에서 가장 먼저 확인하게 되는 가장 높은 점수를 받은 Solution과 현 시점에 도움이 될 수 있는 가장 최근에 업데이트(최소 점수 확보)된 Solution을 각각 정리하였습니다.
아래 word cloud를 통해 이번 포스팅의 주요 키워드를 미리 확인하세요.
Notification click: activity already open
알림 클릭: 활동이 이미 열려 있습니다
문제 내용
I have an application with notifications that open a certain activity if I click them. I want that, if I click the notification and the activity is already opened, it's not started again, but just brought to front.
알림을 클릭하면 특정한 액티비티가 열리는 애플리케이션이 있습니다. 그런데, 해당 액티비티가 이미 열려 있다면 새로 시작하는 것이 아닌 액티비티를 화면 상단으로 가져오는 방식으로 동작하도록 하고 싶습니다.
I thought I could do it with the flag FLAG_ACTIVITY_BROUGHT_TO_FRONT
or FLAG_ACTIVITY_REORDER_TO_FRONT
, but it keeps opening it again so I have the activity twice.
FLAG_ACTIVITY_BROUGHT_TO_FRONT 또는 FLAG_ACTIVITY_REORDER_TO_FRONT 플래그를 사용하여 구현할 수 있을 것으로 생각했지만, 다시 열리는 문제가 발생하여 액티비티가 두 번 나타나게 됩니다.
This is my code:
다음은 해당 코드입니다.
event_notification = new Notification(R.drawable.icon,
mContext.getString(R.string.event_notif_message), System.currentTimeMillis());
Intent notificationIntent = new Intent(mContext, EventListActivity.class);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
sendNotification(event_notification, notificationIntent, mContext.getString(R.string.event_notif_title),
body, Utils.PA_NOTIFICATIONS_ID);
Can I manage it with flags or should I store a variable in SharedPreferences to check if it's opened or not?
플래그로 해결할 수 있는지 또는 액티비티가 열려 있는지 여부를 SharedPreferences에 저장하여 확인해야 할까요?
Thanks!
감사합니다!
높은 점수를 받은 Solution
You need to set the launchMode
attribute of the Activity
you are starting to singleTop
. This will cause incoming Intents to be delivered to the existing instance rather than starting a new instance when that Activity
is already at the top of the task's stack.
시작하는 액티비티의 launchMode 속성을 singleTop으로 설정해야 합니다. 이렇게 하면 Activity가 태스크 스택의 맨 위에 이미 있을 때 새로운 Intent가 기존 인스턴스로 전달되도록 하여 새 인스턴스가 시작되지 않습니다.
This is done in the manifest by adding android:launchMode="singleTop"
to the <activity>
element. To access the latest Intent (if you are interested in any data that may have passed in with it), override onNewIntent()
in your Activity
.
이를 수행하려면 <activity> 요소에 android:launchMode="singleTop"을 추가하여 매니페스트에서 Activity의 launchMode 속성을 설정해야 합니다. 또한 관련 데이터를 액세스하려면 Activity에서 onNewIntent() 메서드를 재정의해야 합니다.
가장 최근 달린 Solution
Use onNewIntent()
for handling new data from notification click and refresh the activity.
알림 클릭 시 새 데이터를 처리하고 액티비티를 새로 고칠 때 onNewIntent()를 사용하세요.
In onNewIntent
get the new data from the new intent(which served by the new notification) and catch them, for example:
onNewIntent 메서드에서 새로운 인텐트에서(새로운 알림에서 제공된) 새로운 데이터를 가져오고, 이를 처리하면 됩니다. 예를 들어:
title = intent.getStringExtra("title")
in onCreate
previously :)
onCreate에서 이전에 수행했던 작업을 진행합니다.
It will refresh present activity with new notification data.
이렇게 하면 새로운 데이터가 포함된 알림이 전달되어 현재 액티비티가 새로 고쳐집니다.
You can also follow this tutorial.
이 튜토리얼을 참고할 수도 있습니다.
출처 : https://stackoverflow.com/questions/12043671/notification-click-activity-already-open
'개발 > 안드로이드' 카테고리의 다른 글
안드로이드 ScrollView에서 스크롤 바 트랙 제거하기 (0) | 2023.02.12 |
---|---|
콘텐트 URI에서 파일 URI 가져오기 (0) | 2023.02.11 |
fragment에서 startActivityForResult()를 실행하고 결과 받기 (0) | 2023.02.11 |
모바일 웹사이트 입력창에 포커스가 갈 때 숫자 키패드가 나오게 하기 (0) | 2023.02.10 |
매개변수와 함께 액티비티 시작하기 (0) | 2023.02.10 |