공부용 블로그

(2)Notification_Pending Intent, 알림 우선순위, 버전별 관리 본문

Android

(2)Notification_Pending Intent, 알림 우선순위, 버전별 관리

tomato212 2020. 8. 4. 04:51

이전 시간에는 notification을 어떻게 구현하는지 간단하게 적용해보았다. 하지만 알림이 왔을때 해당 알림을 탭하면 아무일도 일어나지 않았다.

이번에는 알림을 탭했을때 관련된 화면으로 이동시켜보자

1. Content Intent 추가 및 알림 해제 

알림을 빌드할때 위 코드처럼 setContentIntent 를 사용하면 원하는 액션(여기서는 화면 이동)을 인텐트로 만들 수 있다.

이때 중요한 것은 인텐트는 Pending Intent를 써야 한다는 것이다. Pending Intent는 우리가 써왔던 인텐트를 한번 더 감싼 형태이다.

Pending Intent는 안드로이드 시스템이 미리 지정해 놓은 액션을 대신 수행하도록 허용한다.

 

그럼 pending Intent를 사용하여 알림을 탭했을때 MainActivity로 이동하도록 해보자.

 

(1) MainActivity.java 에 getNotificationBuilder() 메서드 안에서 시작부분에 인텐트를 만들어준다.

 

(2) 바로 이어서 펜딩인텐트를 만들어주는데 위의 인텐트의 생성방법과는 달리 펜딩 인텐트는 getActivity, getActivities, getBroadcast, getService로 인텐트 객체를 만들 수 있다. (아래 안드로이드 디벨로퍼 공식문서 내용 참고)

 

A description of an Intent and target action to perform with it. Instances of this class are created with getActivity(Context, int, Intent, int), getActivities(Context, int, Intent[], int), getBroadcast(Context, int, Intent, int), and getService(Context, int, Intent, int); the returned object can be handed to other applications so that they can perform the action you described on your behalf at a later time.

(3) NotificationCompat.Builder 에서 알림 관련 속성을 set 해주는 부분에 아래 코드를 추가한다.

setAutoCancel(true) : 알림을 탭하면 알림이 자동으로 삭제

When the user taps the notification, the notification is removed from the status bar.

 

2. 앱 실행

1. 앱을 실행 및 Notify Me! 버튼 탭 (알림이 뜨게 됨)

2. 바로 홈 버튼 탭

3. 알림을 탭하면 다시 MainActivity 로 이동하는 것을 확인할 수 있다.

 

====================================================================================

 

부록. Android 7.0 이하 버전의 호환성을 위한 우선순위 추가

사용자가 notify me! 버튼을 탭하면 알림이 실행된다.

그러나 알림이 왔을때 사용자가 볼 수 있는 시각적 요소는 알림바에 아이콘 뿐이다.

사용자의 주의를 좀 더 끌기 위해서 notification default options를 세팅해보자.

* Android 8.0 이상부터는 Notification Channel 을 사용하여 우선순위를 정할 수 있지만

이전 버전과의 호환성을 높이는 것은 좋은 연습(?)이므로 해보기로 한다.

 

우선순위는 PRIORITY MIN (-2) 부터 PRIORITY MIN (2) 까지의 Interger 값이다.

notification drawer에서 우선순위가 높은 알림은 우선순위가 낮은 알림보다 위에 분류된다.

"HIGH" 또는 "MAX" 알림은 "heads up(사용자의 화면 상단의 드롭다운으로 나타남)" 노티피케이션으로 전달된다.

모든 알림을 이 MAX로 해놓는 것은 좋지 않다. 그러므로 필요할때만 사용하자.

 

getNotificationBuilder() 안에 다음을 추가

DEFAULT_ALL은 알림 소리, 진동, LED 상태표시등을 기본값으로 셋한다. 

앱을 실행시켜 보면 기존에 노티 채널에서 내가 설정한 세팅이 기본값으로 바뀌어 있을 것이다.

만약 그대로라면 앱을 지우고 다시 실행하면 된다.

 

high-priority 만으로는 알림이 드롭다운 되지 않고 priority와 defaults가 모두 set 되어야한다.

참고로 setDefaults는 API level 26 부터 deprecated 됨. 그렇지만 여기서는 26 미만을 위한 것이므로 쓰는것이 맞음

 

다음시간에는 알림을 업데이트하는 방법에 대해 알아보자.