코틀린 안드로이드 앱개발 강좌, 소리와 진동 알림

작성일: 2023년 10월 4일

1. 개요

이 강좌에서는 코틀린을 사용하여 안드로이드 앱에서 소리와 진동 알림을 구현하는 방법에 대해 설명합니다. 알림 시스템은 안드로이드 앱에서 사용자와 상호작용할 수 있는 중요한 요소이며, 이 강좌를 통해 기본적인 알림 기능을 이해하고 구현할 수 있습니다.

소리 및 진동 알림은 사용자의 주의를 끌기 위해 다양한 상황에서 활용될 수 있습니다. 예를 들어, 메시지나 알림이 도착했을 때 또는 특정 이벤트가 발생했을 때 사용됩니다.
이 강좌에서는 기본적인 알림 사용법 뿐만 아니라, 사용자 정의 알림 채널을 만들어 다양한 소리와 진동 패턴을 적용하는 방법도 설명합니다.

2. 개발 환경 설정

이 강좌에서는 Android Studio를 기반으로 합니다. Android Studio는 안드로이드 앱 개발에 가장 많이 사용되는 통합 개발 환경(IDE)입니다. 아래의 단계를 통해 환경을 설정할 수 있습니다.

  1. Android Studio 설치: 최신 버전의 Android Studio를 다운로드하여 설치합니다. 설치 시 모든 필수 구성 요소를 포함하라는 옵션을 선택하세요.
  2. Kotlin 지원: Android Studio는 기본적으로 Kotlin을 지원하므로, Kotlin 플러그인을 설치할 필요는 없습니다. 새로운 프로젝트를 생성할 때 Kotlin 옵션을 선택하면 됩니다.
  3. 프로젝트 생성: ‘Empty Activity’ 템플릿을 선택하여 새 프로젝트를 시작하십시오. 프로젝트 이름과 패키지 이름은 각자의 취향에 맞게 선택하세요.

3. 알림 시스템 이해하기

안드로이드의 알림 시스템은 사용자가 특정 이벤트에 대한 정보를 받을 수 있도록 하고, 상단 상태바에 알림을 표시합니다. 알림은 다양한 형태를 가질 수 있으며, 소리, 진동, 텍스트 및 이미지 등을 포함할 수 있습니다.

알림을 사용하기 위해서는 NotificationCompat.Builder라는 클래스를 사용해야 합니다. 이 클래스를 사용하여 알림의 세부 정보를 설정하고 NotificationManager를 통해 알림을 표시합니다.

4. 기본 알림 구현하기

먼저, 기본 알림을 구현하는 간단한 예제를 살펴보겠습니다. 이 예제에서는 버튼 클릭 시 알림이 표시되는 간단한 앱을 만들어보겠습니다.
아래의 코드를 참고하여 MainActivity.kt 파일에 코드를 추가합니다.

4.1 MainActivity.kt


                package com.example.soundvibrationnotification

                import android.app.NotificationChannel
                import android.app.NotificationManager
                import android.content.Context
                import android.os.Build
                import android.os.Bundle
                import android.view.View
                import android.widget.Button
                import androidx.appcompat.app.AppCompatActivity
                import androidx.core.app.NotificationCompat

                class MainActivity : AppCompatActivity() {

                    private val channelId = "default_channel_id"
                    private val notificationId = 1

                    override fun onCreate(savedInstanceState: Bundle?) {
                        super.onCreate(savedInstanceState)
                        setContentView(R.layout.activity_main)

                        createNotificationChannel()

                        val button: Button = findViewById(R.id.button_notify)
                        button.setOnClickListener { sendNotification() }
                    }

                    private fun createNotificationChannel() {
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                            val channel = NotificationChannel(
                                channelId,
                                "기본 채널",
                                NotificationManager.IMPORTANCE_DEFAULT
                            )
                            val notificationManager: NotificationManager = getSystemService(
                                Context.NOTIFICATION_SERVICE
                            ) as NotificationManager
                            notificationManager.createNotificationChannel(channel)
                        }
                    }

                    private fun sendNotification() {
                        val builder = NotificationCompat.Builder(this, channelId)
                            .setSmallIcon(R.drawable.ic_notification)
                            .setContentTitle("소리 및 진동 알림")
                            .setContentText("이것은 기본 알림입니다.")
                            .setPriority(NotificationCompat.PRIORITY_DEFAULT)

                        val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
                        notificationManager.notify(notificationId, builder.build())
                    }
                }
            

예제 코드 설명:

  • 채널 생성: 안드로이드 8.0(API 26) 이상의 버전에서는 알림 채널을 만들어야 합니다. 이는 사용자가 알림을 그룹화하고 사용자 환경에 맞게 통제할 수 있도록 합니다.
  • 알림 발송: NotificationCompat.Builder를 사용하여 알림의 제목, 내용 및 아이콘을 설정한 후 notify() 메서드를 통해 알림을 발송합니다.

위의 코드를 activity_main.xml 파일과 함께 실행하면, ‘소리 및 진동 알림’ 버튼을 클릭했을 때 알림이 표시되는 것을 확인할 수 있습니다.

5. 소리 알림 추가하기

이제 알림에 소리를 추가해보겠습니다. 소리 파일을 res/raw 폴더에 추가한 뒤, 알림을 설정할 때 소리를 동적으로 부여합니다.
아래의 예제 코드를 수정하여 소리 알림을 구현해보세요.

5.1 소리 파일 추가하기

소리 파일을 res/raw 폴더에 추가하세요. 예를 들어, ‘notification_sound.mp3’라는 소리 파일을 추가했다고 가정하겠습니다.

5.2 MainActivity.kt 수정하기


                private fun sendNotification() {
                    val soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)
                    val builder = NotificationCompat.Builder(this, channelId)
                        .setSmallIcon(R.drawable.ic_notification)
                        .setContentTitle("소리 및 진동 알림")
                        .setContentText("이것은 소리 알림입니다.")
                        .setSound(soundUri) // 소리 추가
                        .setPriority(NotificationCompat.PRIORITY_DEFAULT)

                    val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
                    notificationManager.notify(notificationId, builder.build())
                }
            

이제 알림이 표시될 때 기본 알림 사운드가 발생합니다.

6. 진동 알림 추가하기

알림에 진동 기능을 추가하려면, 진동 패턴을 정하고 NotificationCompat.Builder를 사용하여 설정하는 방법을 알아보겠습니다.

6.1 진동 권한 추가하기

AndroidManifest.xml 파일에 진동 권한을 추가해야 합니다. 아래와 같이 테스트코드 내에 permission을 선언해 주십시오.


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

6.2 MainActivity.kt 수정하기


                private fun sendNotification() {
                    val vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
                    val vibratePattern = longArrayOf(0, 200, 100, 300)
                    
                    // 진동 설정
                    val builder = NotificationCompat.Builder(this, channelId)
                        .setSmallIcon(R.drawable.ic_notification)
                        .setContentTitle("소리 및 진동 알림")
                        .setContentText("이것은 진동 알림입니다.")
                        .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)) // 소리 추가
                        .setVibrate(vibratePattern) // 진동 패턴 추가
                        .setPriority(NotificationCompat.PRIORITY_DEFAULT)

                    val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
                    notificationManager.notify(notificationId, builder.build())
                    
                    // 진동 시작
                    vibrator.vibrate(vibratePattern, -1)
                }
            

이 코드에서는 진동 패턴이 설정되었고, 알림과 함께 진동이 발생합니다.

7. 사용자 정의 알림 채널

이제 다양한 옵션을 가진 사용자 정의 알림 채널을 생성해보겠습니다. 각 채널에는 소리, 진동 및 알림 중요도를 설정할 수 있습니다.

7.1 채널 추가하기


                private fun createNotificationChannel() {
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                        val channel = NotificationChannel(
                            channelId,
                            "사용자 정의 채널",
                            NotificationManager.IMPORTANCE_HIGH
                        )
                        channel.description = "사용자 정의 채널 설명"
                        channel.enableLights(true)
                        channel.lightColor = Color.RED
                        channel.enableVibration(true)
                        channel.vibrationPattern = longArrayOf(0, 400, 200, 400)

                        val notificationManager: NotificationManager = getSystemService(
                            Context.NOTIFICATION_SERVICE
                        ) as NotificationManager
                        notificationManager.createNotificationChannel(channel)
                    }
                }
            

위 코드에서는 사용자 정의 채널을 생성하여 알림에 다양한 기능을 추가할 수 있습니다.

8. 결론

이번 강좌에서는 코틀린을 사용하여 안드로이드 앱에서 소리 및 진동 알림을 구현하는 기본적인 방법을 알아보았습니다.
알림 시스템을 통해 사용자는 애플리케이션에서 발생하는 이벤트에 실시간으로 반응할 수 있습니다.
알림의 중요성과 그 구현 방법, 사용자 경험 개선을 위한 다양한 설정 방법을 배웠습니다.
이 강좌를 바탕으로 복잡한 기능을 가진 알림 시스템을 구현해보시기 바랍니다.

추가로 개인화된 알림, 행동을 포함한 알림, 알림 그룹화 등 다양한 알림 기능을 탐구하고 실험해 보세요.
앞으로도 다양한 기능을 활용하는 훌륭한 안드로이드 애플리케이션을 개발하실 수 있기를 바랍니다.