Android

진동 울리기

까망사과 2022. 7. 21. 02:00

API

Vibrator

진동을 울릴 때 사용하는 API이다.

API 레벨 31(S) 미만 버전에서는 Activity.getSystemService(Context.VIBRATOR_SERVICE)Vibrator를 얻는다.

 

VibratorManager

API 레벨 31(S) 이상 버전에서 Vibrator를 얻기 위해 사용하는 API이다.

Activity.getSystemService(Context.VIBRATOR_MANAGER_SERVICE)VibratorManager를 얻은 뒤,

getVibrator() 또는 getDefaultVibrator()를 호출하여 Vibrator를 얻을 수 있다.

 


진동 울리기

Vibrator 객체의 vibrate()에 지속 시간, 진동 패턴, 반복 횟수 등을 파라미터로 전달하여 진동을 울린다.

권한이 필요하므로 매니페스트 파일에 다음 태그를 선언해야 한다.

<uses-permission android:name="android.permission.VIBRATE" />
  • vibrate(milliseconds: Long) (API 레벨 1 ~ 25)
    지속 시간(단위: ms)를 지정하여 진동을 울린다.
  • vibrate(milliseconds: Long, attributes: AudioAttributes!) (API 레벨 21 ~ 25)
    용도 및 컨텐츠 유형 등 진동에 대한 여러 정보가 포함된 AudioAttributes를 함께 지정한다.
  • vibrate(pattern: LongArray!, repeat: Int) (API 레벨 1 ~ 25)
    진동 패턴을 나타내는 LongArray와 반복 횟수를 지정하여 진동을 울린다.
  • vibrate(pattern: LongArray!, repeat: Int, attributes: AudioAttributes!) (API 레벨 21 ~ 25)
  • vibrate(vibe: VibrationEffect!) (API 레벨 26 ~)
    진동 패턴을 나타낼 때 LongArray 대신 VibrationEffect를 사용한다.
  • vibrate(vibe: VibrationEffect!, attributes: AudioAttributes!) (API 레벨 26 ~ 32)
  • vibrate(vibe: VibrationEffect, attributes: VibrationAttributes) (API 레벨 33 ~)
    진동에 대한 정보를 AudioAttributes 대신 VibrationAttributes를 통해 전달한다.
val vibrator = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
    (getSystemService(Context.VIBRATOR_MANAGER_SERVICE) as VibratorManager).defaultVibrator
} else {
    getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
}

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    val oneShotEffect = VibrationEffect.createOneShot(500, VibrationEffect.DEFAULT_AMPLITUDE)
    vibrator.vibrate(oneShotEffect)
} else {
    vibrator.vibrate(500)
}