소리와 진동 알림
소리 알림
안드로이드 시스템은 알림(NOTIFICATION), 알람(ALARM), 벨소리(RINGTONE) 등의 소리를 제공하며 이 소리는 RingtonManager로 얻을 수 있습니다.
// 1. getDefaultUri()함수를 통해 소리의식별값을 Uri객체로 얻습니다.
val uriNotification : Uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
// 2. getRingtone()함수를 통해 위에서 얻은 소리식별Uri를 사용하여 Ringstone 객체 생성
val ringtone = RingtoneManager.getRingtone(applicationContext, uriNotification);
// 3. 효과음 재생
ringtone.play();
// 중단이 필용할때
ringtone.stop();
앱에서 자체에서 음원을 준비해서 재생하는 방법도 있습니다. 음원파일은 리소스(디렉터리는 res/raw)로 등록해서 이용해야 합니다. 음원을 재생하는 클래스는 MediaPlayer입니다. 이클래스에 리소스 정보를 지정하고 play() 함수를 호출하면 음원이 재생합니다
// 소리만 들리는 플레이어 방법 1
var mediaPlayer = MediaPlayer()
mediaPlayer.setDataSource("http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4")
mediaPlayer.prepare()
mediaPlayer.start()
// 소리만 들리는 플레이어 방법 2
var uri = Uri.parse("http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4")
var mediaPlayer2 = MediaPlayer.create(this, uri)
mediaPlayer2.start()
// 소리만 들리는 플레이어 방법 3
var mediaPlayer3 = MediaPlayer.create(this, R.raw.sample)
mediaPlayer3.start()
참고
https://developer.android.com/reference/android/media/RingtoneManager
https://developer.android.com/guide/topics/media/mediaplayer?hl=ko
https://jwsoft91.tistory.com/148
진동 알림
앱에서 진동이 울리게 하려면 먼저 매니페스트 파일에 <uses-permission>으로 퍼미션을 얻어야 합니다.
<uses-permission android:name="android.permission.VIBRATE" />
진동은 Vibrator 클래스를 이용합니다.
val vibrator = getSystemService(VIBRATOR_SERVICE) as Vibrator
31 이전 버전에서는 VIBRATOR_SERVICE로 식별되는 시스템 서비스를 이용하였지만 31 버전부터는 VIBRATOR_MANAGER_SERVICE로 식별되는 VibratorManager라는 시스템 서비스를 얻고 이 서비스에 서 Vibrator를 이용합니다.
val vibrator = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S){
val vibratoManager = this.getSystemService(VIBRATOR_MANAGER_SERVICE) as VibratorManager
vibratorManager.defaultVibrator;
} else {
getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
}
시간과 패턴을 지정해 진동 울리기(API 레벨 1부터 제공하는 함수 & deprecated(사용을 보장할수없으니 더이상 사용하지 말라))
open fun vibrate(milliseconds: Long): Unit
//milliseconds 진동이 울리는 시간 ex) milliseconds = 500 -> 0.5초간 진동이 울림
open fun vibrate(pattern: LongArray!, repeat: Int): Unit
//pattern 진동 패턴을 지정
//ex) pattern = {500,1000,500,2000} -> 0.5초간 쉬고 1초간 진동 0.5초간 쉬고 2초간 진동이 울림
//repeat 얼마나 반복할지 지정
// ex) repeat = -1 -> 패턴 1번만 하고 종료
// ex) repeat = 0 -> 패턴 계속 반복 cancel()함수로만 끌수있음
진동의 세기까지 지정해 진동 울리기 VibrationEffect 제공 (API 레벨 26부터 제공하는 함수)
open fun vibrate(vibe: VibrationEffect!): Unit
//VibrationEffect 객체로는 진동이 울리는 시간 이외에 진동의 세기까지 제어
open static fun createOneShot(milliseconds: Long, amplitude: Int): VibrationEffect!
// 진동 강도 amplitude의 범위는 0~255, VibrationEffect.DEFAULT_AMPLITUDE같은 상수로도 지정 가능
open static fun createWaveform( timings: LongArray!, amplitudes: IntArray!, repeat: Int): VibrationEffect!
참고
https://developer.android.com/reference/android/os/Vibrator
https://developer.android.com/reference/android/os/VibratorManager