진동을 울려보자 (Vibrator)

지프치프·2021년 11월 27일
0

Android

목록 보기
30/86
post-thumbnail

“Android 로봇은 Google에서 제작하여 공유한 저작물을 복제하거나 수정한 것으로 Creative Commons 3.0 저작자 표시 라이선스의 약관에 따라 사용되었습니다.”


개요

토이 프로젝트를 만들고 있었는데
갱신을 할 때마다 진동을 울려주고 싶어서 사용법을 정리해 보았다.
코드는 굉장히 쉽다.

구현

진동은 Vibrator라는 클래스를 통해서 사용이 가능하다.
하지만 API Level 26 (Oreo)부터 방법이 조금 바뀌었다.
Oreo부터는 VibrationEffect라는 클래스를 한번 더 거쳐줘야 한다.

1회만 하기

  • API Level 26 미만
val vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
vibrator.vibrate(200)
  • API Level 26 이상
val vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
val effect = VibrationEffect.createOneShot(200, VibrationEffect.DEFAULT_AMPLITUDE)
vibrator.vibrate(effect)

주기적으로 진동하기

패턴을 지정해서 반복적으로 진동을 발생하는 것도 가능하다.
LongArray에 주기를 담아서 인자로 넘겨주면 되는데
짝수 인덱스는 대기하는 시간
홀수 인덱스는 진동을 울리는 시간으로 담아서 넘겨주면 된다.

longArrayOf(100, 200, 100, 200)

예를 들어, 위 코드는 200ms짜리 진동을 100ms 주기로 두번 울린다.
쉽게 말하자면 짝수 인덱스, 홀수 인덱스를 하나의 주기로 묶어서 생각하면 편하다.

  • API Level 26 미만
val vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
val pattern = longArrayOf(100, 200, 100, 200)
vibrator.vibrate(pattern, -1)
  • API Level 26 이상
val vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
val pattern = longArrayOf(100, 200, 100, 200)
val effect = VibrationEffect.createWaveform(pattern, -1)
vibrator.vibrate(effect)

진동 무한반복

눈치 챈 분들이 있겠지만

vibrator.vibrate(pattern, -1)
val effect = VibrationEffect.createWaveform(pattern, -1)

pattern과 같이 넣어준 -1 같이 넣어주었다.
-1은 repeat이란 인자를 넣어주는 자리인데
0을 넣어주면 무한반복,
-1을 넣어주면 반복하지 않는다는 뜻이다.

무한반복이 되면 취소를 해야할텐데
취소하는 것 또한 메소드로 제공한다.

vibrator.cancel()

위 메소드를 호출하면 반복되던 진동이 멈춘다.

개인적으로 공부했던 것을 바탕으로 작성하다보니
잘못된 정보가 있을수도 있습니다.
인지하게 되면 추후 수정하겠습니다.
피드백은 언제나 환영합니다.
읽어주셔서 감사합니다.

profile
지프처럼 거침없는 개발을 하고싶은 개발자

0개의 댓글