[Android Study] 다이얼로그 - 소리와 진동 알림
* 소리 알림
- 문자나 카카오톡 같은 앱에서 새로운 메세지를 전달받으면 사용자 알림 효과로 짧은 소리를 이용해 알려준다. 이런 목적으로 사용하는 짧은 소리를 알림음이라고 한다.
- 알림음은 카카오톡처럼 자체 녹음한 음원을 쓸 수도 있지만 안드로이드 시스템에 등록된 소리를 이용할 수도 있다. 안드로이드 시스템은 알림(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,
)
)
}
}
'Study > Android' 카테고리의 다른 글
[Compose Study] - 컴포즈 프로젝트 (0) | 2024.05.26 |
---|---|
[Android Study] 다이얼로그 - 알림 채널, 알림 객체 (0) | 2024.03.21 |
[Android Study] 다이얼로그 - 커스텀 다이얼로그 (1) | 2024.03.19 |
[Android Study] 다이얼로그 - AlertDialog (0) | 2024.03.18 |
[Android Study] 다이얼로그 - Toast, 날짜/시간 (0) | 2024.03.17 |