공부용 블로그

(3)Notification_알림 업데이트와 취소하기 본문

Android

(3)Notification_알림 업데이트와 취소하기

tomato212 2020. 8. 5. 01:10

앱이 알림을 실행한 후 정보가 변경되거나 관련이 없어진 경우 알림을 업데이트하거나 취소할 수 있다.

 

다음 예제를 통해 공부해보자.

 

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 에 넣는다.

mascot_1

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);