[Android] 진동 세기 조절이 안되는 문제 해결법

오규성·2025년 11월 15일

context.getSystemService(Context.VIBRATOR_MANAGER_SERVICE) as VibratorManager
context.getSystemService(VIBRATOR_SERVICE) as Vibrator

우리가 안드로이드 스마트폰에 진동을 줄 때는 위와 같이 VibratorManagerVibrator 인스턴스 객체를 만들고, 이것에 존재하는 vibrate Method 를 사용한다.

진동을 줘야하는 작업이 생겨서, 위의 코드를 사용했는데 한 가지 문제가 생겼다.

일부 기기에서는 진동의 세기를 내가 조정한 세기로 실행이 되는 반면에 어떤 기기들에서는 진동의 세기를 조절할 수 없다는 문제였다.

가끔가다가 LG 와 같은 디바이스에서 이상한 버그들이 발생하므로 이와 같은 현상이 아닐까 싶었지만 진동의 세기 조절이 가능한 핸드폰, 불가능한 핸드폰 모두가 갤럭시라서 이 이유를 알 수 없었다.

그런데 신기한 것은 테스트 용으로 다른 앱들을 켜보면 진동 세기 조절이 불가능한 핸드폰에서는 진동이 아예 없었다.

이것으로 인해 나는 무언가를 통해서 개발자가 진동 세기를 먹히지 않도록 필터링을 할 수 있다는 것을 알게 되었고 다음과 같은 함수를 알게 되었다.

Vibrator.hasAmplitudeControl()

내부 설명으로는 다음과 같은 주석이 달려있었다.

Check whether the vibrator has amplitude control.
Returns:
True if the hardware can control the amplitude of the vibrations, otherwise false.

진동 세기를 조절할 수 있는지 판단하는 함수라고 하는데, 이것이 true 라면 하드웨어가 진동 세기를 조절할 수 있는 것이고 그게 아니라면 false 라는 것이다.

그리고 실제로 테스트해보니 진동 세기 조절이 불가능하던 디바이스에서는 이것이 false 로 나왔다.

일부 디바이스에서 진동 세기 조절이 되지 않는다면, 이 함수를 사용하여 테스트 해보도록 하자.

profile
안드로이드 개발자 Gyu 의 개발 블로그 !

0개의 댓글