[Android Study] 다이얼로그 - 알림 채널, 알림 객체

728x90
반응형

* 상태 바에 앱의 정보를 출력하는 것을 알림(notification)이라고 한다.

 - API 33 버전부터는 앱에서 알림을 띄우기 위해 사용자에게 퍼미션을 요청해야 한다.

<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />

 - 원래 상태 바는 시스템에서 관리하는 곳이며 앱이 직접 제어할 수 없다. 그런데 앱에서 시스템에 의뢰하면 시스템에서 관리하는 상태 바에 앱의 알림을 출력할 수 있다. 따라서 앱의 화면을 구성하거나 사용자 이벤트를 처리하는 프로그래밍과는 구조가 다르며 알림을 위해 제공하는 API를 이용해야 한다.

 - 알림은 NotificationManager의 notify() 함수로 발생한다. notify() 함수에는 NotificationCompat.Builder가 만들어 주는 Notification 객체를 대입하며 이 객체에는 알림 정보가 저장된다. 그런데 NotificationCompat.Builder를 만들 때 NotificationChannel 정보를 대입해 줘야 한다.

 - 즉, NotificationChannel로 알림 채널을 만들고 이 채널 정보를 대입해 NotificationCompat.Builder를 만든 다음, 이 빌더로 Notification 객체를 만든다. 이 객체를 NotificationManager의 notify() 함수에 대입하는 구조이다.

 

- NotificationCompat.Builder를 만드는 방법은 API 26부터 조금 바뀌었다. 원래는 Builder(context: Context!) 였지만, 현재는 Builder(context: Context!, channelId: String!)으로 만들어야 한다. NotificationChannel을 만들고 이 채널의 식별값을 빌더의 생성자 매개변수에 채널id로 지정해 줘야 한다. API 26버전부터 채널 개념을 도입하면서 앱의 알림을 채널별로 구분하기 때문이다. 이렇게 하면 받고 싶은 채널의 알림만 선택해서 설정할 수 있다.

- 아래와 같이 NotificationChannel로 알림 채널 생성자를 만들고 알림 빌더(Notification.Builder)를 만들 수 있다.

 

* 알림 객체

- 알림 빌더를 만들었으면 이 빌더를 이용해 Notification 객체를 만들어야 한다. 이 객체에 출력할 이미지, 문자열 등의 정보를 담는다. 앱에서 알림이 발생하면 다음 그림처럼 상태 바에 이미지가 출력된다. 이를 스몰 아이콘(small icon)이라고 부른다. 그리고 상태 바를 끌어내리면 다음처럼 알림정보가 보인다.

 

- 알림은 스몰 아이콘과 발생 시각, 제목, 내용 등으로 구성된다. 이러한 알림 정보를 Notification 객체에 설정해야 한다. 

// 알림 객체 설정
builder.setSmallIcon(android.R.drawable.ic_notification_overlay)
builder.setWhen(System.currentTimeMillis())
builder.setContentTitle("Content Title")
builder.setContentText("Content Message")

 

 - 빌더의 setter 함수를 이용해 알림의 구성 정보를 설정하고 이제 NotificationManager 클래시의 notify() 함수를 이용해 알림을 띄운다.

// 알림 발생
manager.notify(11, builder.build())

 - 첫 번째 매개변수값은 알림을 식별하는 데 사용하는 숫자이며 개발자가 임의로 지정한다. 이 식별값은 사용자 폰에 발생한 알림을 코드에서 취소할 때 사용한다. 이때 cancel() 함수를 이용하며 매개변수로 취소할 알림의 식별값을 전달한다.

// 알림 취소
manager.cancel(11)

 

 - 사용자가 알림을 손가락으로 터치하거나 스와이프를 하더라도 알림이 사라지지 않게 하려면 다음과 같은 함수를 사용한다.

// 알림 취소 막기
builder.setAutoCancel(false)
builder.setOngoing(true)

 - setAutoCancel(false)로 지정하면 알림을 터치할 때 이벤트는 발생하지만 알림이 사라지지는 않는다. 또한 setOngoing(true)로 지정하면 사용자가 알림을 스와이프해도 사라지지 않는다. 2가지를 모두 설정했다면 사용자가 알림을 취소할 수 없으며 결국 코드에서 특정 순간에 cancel() 함수로 취소해야 한다.

728x90
반응형
TAGS.

Comments