Android Studio - Notifications

박재원·2024년 1월 15일
0

TIL

목록 보기
30/50
post-thumbnail

기본구성


1. Small icon: 필수 구성요소이며 setSmallIcon()을 통해 설정된다.
2. App name: 시스템에서 제공한다.
3. Time stamp: 시스템에서 제공하지만 setWhen()을 사용하여 재정의하거나 setShowWhen(false)로 숨길 수 있다.
4. Large icon: 선택사항이며 setLargeIcon()을 통해 설정된다.
5. Title: 선택사항이며 setContentTitle()을 통해 설정된다.
6. Text:선택사항이며 setContentText()를 통해 설정된다.

  • 알림은 다음과 같은 클래스를 이용하여 구성합니다

    	NotificationManager : 알림을 시스템에 발생시키는 SystemService
    	Notification : 알림 구성 정보를 가지는 객체
    	NotificationCompat.Builder : 알림을 다양한 정보로 생성
    	NotificationChannel : 알림의 관리 단위(Android Oreo에서 추가)
  • Notification 객체에 각종 정보를 담고 이 객체를 NotificationManager로 시스템에 등록하는 구조입니다. getSystemService() 함수를 이용하여 NotificationManager를 얻는다.

NotificationChannel

  • Android O(API Level 26) 부터는 Builder를 만드는 방법이 변경되었다.
  • NotificationChannel이라는 개념이 추가되었고 NotificationChannel에 의해서 Builder가 생성되게 변경되었다.
// NotificationManager 객체 생성
val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    // Notification Channel 아이디, 이름, 설명, 중요도 설정
    val channelId = "channel_one"
    val channelName = "첫 번째 채널"
    val channelDescription = "첫 번째 채널에 대한 설명입니다."
    val importance = NotificationManager.IMPORTANCE_DEFAULT

    // NotificationChannel 객체 생성
    val notificationChannel = NotificationChannel(channelId, channelName, importance)
    // 설명 설정
    notificationChannel.description = channelDescription

    // 채널에 대한 각종 설정(불빛, 진동 등)
    notificationChannel.enableLights(true)
    notificationChannel.lightColor = Color.RED
    notificationChannel.enableVibration(true)
    notificationChannel.vibrationPattern = longArrayOf(100L, 200L, 300L)
    // 시스템에 notificationChannel 등록
    notificationManager.createNotificationChannel(notificationChannel)
}
  • NotificationChannel의 생성자로 NotificationChannel의 id, name, importance를 설정한다.
  • description을 설정하고 NotificationChannel에 대해 진동, 불빛 등의 옵션을 설정한다.
  • NotificationManager의 createNotificationChannel 함수를 사용하여 시스템에 NotificationChannel을 설정하면 된다.

NotificationCompat.Builder

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    // Notification Channel 아이디, 이름, 설명, 중요도 설정
    val channelId = "channel_one"

    // 채널 생성 코드...

    // API Level 26(O) 이상에서는 Builder 생성자에 NotificationChannel의 아이디값을 설정
    notificationCompatBuilder = NotificationCompat.Builder(this, channelId)
} else {
    // 26버전 미만은 생성자에 context만 설정
    notificationCompatBuilder = NotificationCompat.Builder(this)
}

notificationCompatBuilder?.let {
    // 작은 아이콘 설정
    it.setSmallIcon(android.R.drawable.ic_notification_overlay)
    // 시간 설정
    it.setWhen(System.currentTimeMillis())
    // 알림 메시지 설정
    it.setContentTitle("Content Title")
    // 알림 내용 설정
    it.setContentText("Content Message")
    // 알림과 동시에 진동 설정(권한 필요(
    it.setDefaults(Notification.DEFAULT_VIBRATE)
    // 클릭 시 알림이 삭제되도록 설정
    it.setAutoCancel(true)
}
  • API Level 26 이상의 휴대폰에서는 Builder를 생성 시 NotificationChannel을 등록해 주어야 한다. 26미만의 버전은 NotificationChannel이 없으므로 생성자에 context만 주었다. 그 후 Builder의 setter 함수를 이용하여 알림의 구성 정보를 명시하면 된다.

Notification

// Notification 객체 생성
val notification = notificationCompatBuilder?.build()
// Notification 식별자 값, Notification 객체
notificationManager?.notify(0, notification)
  • Builder.build() 함수를 사용하여 Notification 객체를 생성한 후 NotificationManager의 notify 함수를 통해 알림을 등록한다.

0개의 댓글