일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- setContentIntent
- notifications
- Pending Intent
- android notification 예제
- notification manager
- 펜딩인텐트
- 알림 인텐트
- 버전별 관리
- 안드로이드 알림채널
- 알림 우선순위
- setPriority(NotificationCompat.PRIORITY_HIGH)
- setDefaults(NotificationCompat.DEFAULT_ALL)
- NotificationCompat.Builder
- 안드로이드 알림
- notification channel
- 안드로이드 알림 예제
- Today
- Total
공부용 블로그
(3)Notification_알림 업데이트와 취소하기 본문
앱이 알림을 실행한 후 정보가 변경되거나 관련이 없어진 경우 알림을 업데이트하거나 취소할 수 있다.
다음 예제를 통해 공부해보자.
1. 알림 업데이트 및 취소하기
(1) 업데이트, 취소버튼 추가하기
activity_main.xml 에 아래 코드 추가
<Button
android:id="@+id/update"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Update Me!"
app:layout_constraintBottom_toTopOf="@+id/cancel"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/notify" />
<Button
android:id="@+id/cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Cancel Me!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/update" />
MainActivity.java
(1) 업데이트, 취소 버튼 멤버변수 선언
private Button button_cancel;
private Button button_update;
(2) onCreate() 안에 업데이트, 취소 버튼 초기화, 버튼에 리스너 달기
button_update = findViewById(R.id.update);
button_update.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Update the notification
}
});
button_cancel = findViewById(R.id.cancel);
button_cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Cancel the notification
}
});
(3) 업데이트 및 취소 메서드 만들기
public void updateNotification() {}
public void cancelNotification() {}
(4) onCreate()에 있는 업데이트 클릭 리스너에서 updateNotification() 호출 , 취소 클릭 리스너 안에서 cancelNotification() 호출하기
2. 알림 업데이트 및 취소 메서드 내의 코드 작성하기
(1) 알림 취소
cancelNotification()에 아래줄 추가
mNotifyManager.cancel(NOTIFICATION_ID);
앱을 실행하여 Notify Me! 버튼을 탭하면 알림이 나온다. 그 상태에서 Cancel Me! 버튼을 탭하면 알림이 취소되는 것을 확인할 수 있다.
(=> 화면에서만 사라지는 것인지 시스템에 등록된 알림이 삭제되는 것인지 확인 필요)
(2) 알림 업데이트
업데이트는 취소보다 좀 더 복잡하다. 안드로이드 알림에는 정보를 압축할 수 있는 스타일이 있다.
예를 들어 Gmail 앱은 사용자가 읽지 않은 메일이 두 개 이상 있을때 하나의 알림으로 압축한다.
이번 예제에서는 알림에 이미지를 포함할 수 있는 BigPictureStyle 로 알림 업데이트를 만들어보겠다.
아래 이미지를 다운로드 한 뒤 res/drawable 에 넣는다.
updateNotification() 안에 아래줄 추가. drawble 이미지를 비트맵으로 바꿔준다.
Bitmap androidImage = BitmapFactory
.decodeResource(getResources(),R.drawable.mascot_1);
이어서 NotificationCompat.Builder의 객체를 얻어오기 위해 아래줄 추가
NotificationCompat.Builder notifyBuilder = getNotificationBuilder();
이어서 알림 스타일 적용
notifyBuilder.setStyle(new NotificationCompat.BigPictureStyle()
.bigPicture(androidImage)
.setBigContentTitle("Notification Updated!"));
알림 스타일을 적용한 후, 알림매니저로 notify. NOTIFICATION_ID는 업데이트 이전의 아이디와 같아야 한다. 그것을 업데이트 시키는 것이므로
mNotifyManager.notify(NOTIFICATION_ID, notifyBuilder.build());
이제 앱을 실행하여 Update Me! 버튼을 눌러 확장시켜보면 이미지가 포함되어 있는 것을 볼 수 있다.
(3) 버튼 상태 토글
지금까지 만들어놓은 세개의 버튼은 알림의 상태와 관계없이 모두 활성화되어 있다. 알림이 온적도 없는데 Udapte Me!, Cancel Me! 버튼은 사용자가에게 혼란을 줄 수도 있으므로 알림 상태에 따라 버튼의 상태를 바꿔보자.
먼저 알림상태에 따라 버튼 활성화/비활성화를 할 수 있게 메서드로 만들어두자
void setNotificationButtonState(Boolean isNotifyEnabled,
Boolean isUpdateEnabled,
Boolean isCancelEnabled) {
button_notify.setEnabled(isNotifyEnabled);
button_update.setEnabled(isUpdateEnabled);
button_cancel.setEnabled(isCancelEnabled);
}
onCreate() 에 작성. 앱을 처음 실행시키면 Notify Me! 버튼만 보인다. 아직 알림이 울린적이 없으므로 업데이트나 취소버튼은 비활성화.
setNotificationButtonState(true, false, false);
sendNotification() :
setNotificationButtonState(false, true, true);
updateNotification() :
setNotificationButtonState(false, false, true);
cancelNotification() :
setNotificationButtonState(true, false, false);
'Android' 카테고리의 다른 글
1. Job Scheduler - Implement a JobService (1) | 2020.08.11 |
---|---|
(4)Notification_알림 액션 버튼 추가하기 (0) | 2020.08.06 |
(2)Notification_Pending Intent, 알림 우선순위, 버전별 관리 (0) | 2020.08.04 |
(1)Notification_Notification Channel, Notification Manager, NotificationCompat.Builder (0) | 2020.08.03 |
Broadcast Receiver란? / 리시버로 인텐트 받기 (0) | 2020.08.02 |