[Android Study] 다이얼로그 - 소리와 진동 알림

728x90
반응형

* 소리 알림

 - 문자나 카카오톡 같은 앱에서 새로운 메세지를 전달받으면 사용자 알림 효과로 짧은 소리를 이용해 알려준다. 이런 목적으로 사용하는 짧은 소리를 알림음이라고 한다.

- 알림음은 카카오톡처럼 자체 녹음한 음원을 쓸 수도 있지만 안드로이드 시스템에 등록된 소리를 이용할 수도 있다. 안드로이드 시스템은 알림(notification), 알람(alarm), 벨소리(ringtone)등의 소리를 제공하며 이 소리는 RingtonManager로 얻을 수 있다.

 

 * 시스템에 등록된 소리를 이용하는 방법

val notification: Uri = RingtoneManager.getDefaultUri(RingtoneManger.TYPE_NOTIFICATION)
val ringtone = RingtoneManager.getRingtone(applicationContext, notification)
ringtone.play()

 

* 앱에서 자체 음원을 준비해서 재생하는 방법

- 음원 파일을 리소스로 등록해서 이용해야 한다. 음원 리소스 디렉터리는 res/raw이다.

 - 음원을 재생하는 클래스는 MediaPlayer이다. 이 클래스에 리소스 정보를 저장하고 start() 함수를 호출하면 음원이 재생된다.

// 음원 재생하기
val player : MediaPlayer = MediaPlayer.create(this, R.raw.fallbackring)
player.start()

 

* 진동 알림

 - 앱에서 진동을 울리게 하려면 manifest 파일에 <uses-permission>으로 퍼미션을 얻어야 한다.

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

 - 진동은 Vibrator 클래스를 이용한다. VIBRATOR_MANAGER_SERVICE로 식별되는 VibratoerManager라는 시스템 서비스를 얻고 이 서비스에서 Vibrator를 이용해야 한다. 

- 안드로이드 SDK 버전 31부터 VIBRATOR_SERVICE가 deprecated 되어 버전별 대응을 해줍니다.

import android.content.Context
import android.content.Context.VIBRATOR_SERVICE
import android.os.Build
import android.os.VibrationEffect
import android.os.Vibrator
import android.os.VibratorManager

class MakeVibrator {
    private lateinit var vib: Vibrator

    fun init(context: Context) {
        vib = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
            val vibratorManager =
                context.getSystemService(Context.VIBRATOR_MANAGER_SERVICE) as VibratorManager
            vibratorManager.defaultVibrator
        } else {
            @Suppress("DEPRECATION")
            context.getSystemService(VIBRATOR_SERVICE) as Vibrator
        }
    }

    fun make(time: Long) {
        vib.vibrate(
            VibrationEffect.createOneShot(
                time,
                VibrationEffect.DEFAULT_AMPLITUDE,
            )
        )
    }
}

 

728x90
반응형
TAGS.

Comments