[Android Studio] 10장 - 알림 띄우기(알림 채널)

이상협·2022년 9월 14일
0

안드로이드스튜디오

목록 보기
42/43
post-custom-banner

알림 채널

상태 바는 화면 상단의 한 줄을 의미하며 이곳에 배터리, 네트워크 시간 등 시스템의 상태 정보가 출력된다. 이 상태 바에 앱의 정보를 출력하는 것을 알림 이라고 한다.

원래 상태 바는 시스템에서 관리하는 곳이며 앱이 직접 제어할 수 없지만, 앱에서 시스템에 의뢰하면 상태 바에 앱의 알림을 출력할 수 있다.

프로그래밍 구조가 다른 이벤트 처리와는 다르며 알림을 위해 제공하는 API를 이용해야 한다.

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

알림 채널 생성

Notification을 만들려면 NotificationCompat.Builder가 필요한데 빌더를 만드는 방법이 API 레벨 26 버전부터 변경되었다. 26 버전 이전까지는 다음 생성자를 사용했다.

  • Builder(context: Context!)

26 버전부터는 채널의 식별값을 빌더의 생성자 매개변수에 지정해줘야 한다.

  • Builder(context: Context!, channelId:String!)

26 버전부터는 알림을 채널로 구분하는데, 앱의 알림을 채널별로 구분할 수 있게 되었다.

// 알림 채널 생성자
NotificationChannel(id: String!, name: CharSequence!, importance: Int)

매개변수로 채널의 식별값과 설정 화면에 표시할 채널 이름을 문자열로 지정한다. 세 번째 매개변수는 이 채널에서 발생하는 알림의 중요도이며 다음의 상수로 지정한다.

알림의 중요도 상수

중요도 상수설명
NotificationManager.IMPORTANCE_HIGH긴급 상황으로 알림음이 울리며 헤드업으로 표시
NotificationManager.IMPORTANCE_DEFAULT높은 중요도이며 알림음이 울림
NotificationManager.IMPORTANCE_LOW중간 중요도이며 알림음이 울리지 않음
NotificationManager.IMPORTANCE_MIN낮은 중요도이며 알림음도 없고 상태 바에도 표시되지 않음

채널의 각종 정보

함수나 프로퍼티로 설정할 수 있다.

  • fun setDescription(description: String!): Unit

    • 채널의 설명 문자열
  • fun setShowBadge(showBadge: Boolean): Unit

    • 홈 화면의 아이콘에 배지 아이콘 출력 여부
  • fun setSound(sound: Uri!, audioAttributes: AudioAttributes!): Unit

    • 알림음 재생
  • fun enableLights(lights: Boolean): Unit

    • 불빛 표시 여부
  • fun setLightColor(argb: Int): Unit

    • 불빛이 표시된다면 불빛의 색상
  • fun enableVibration(vibration: Boolean): Unit

    • 진동을 울릴지 여부
  • fun setVibrationPattern(vibrationPattern: LongArray!): Unit

    • 진동을 울린다면 진동의 패턴

알림 빌더 작성

val manager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager
val builder: NotificationCompat.Builder

if(Builder.VERSION.SDK_INT >= Builder.VERSION_CODES.O) {
	val channelId = "one-channel"
    val channelName = "My Channel One"
    val channel = NotificationChannel(
    	channelId,
        channelName,
        NotificationManager.IMPORTANCE_HIGH
    )
    
    // 채널에 다양한 정보 설정
    channel.description = "My Channel One Description"
    channel.setShowBadge(true)
    val uri: Uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)
    val audioAttributes = AudioAttributes.Builder()
    	.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
        .setUsage(AudioAttributes.USAGE_ALARM)
        .build()
    channel.setSound(uri, audioAttributes)
    channel.enableLights(true)
    channel.lightColor = Color.RED
    channel.enableVibration(true)
    channel.vibrationPattern = longArrayOf(100, 200, 100, 200)
    
    // 채널을 NotificationManager에 등록
    manager.createNotificationChannel(channel)
    
    // 채널을 이용해 빌더 생성
    builder = NotificationCompat.Builder(this, channelId)
} else {
	builder = NotificationCompat.Builder(this)
}

참고

  • Do it! 깡쌤의 안드로이드 프로그래밍 with 코틀린 (개정판)
post-custom-banner

0개의 댓글