728x90
context.getSystemService(Context.VIBRATOR_MANAGER_SERVICE) as VibratorManager
context.getSystemService(VIBRATOR_SERVICE) as Vibrator
우리가 안드로이드 스마트폰에 진동을 줄 때는 위와 같이 VibratorManager 나 Vibrator 인스턴스 객체를 만들고, 이것에 존재하는 vigrate 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 로 나왔다.
일부 디바이스에서 진동 세기 조절이 되지 않는다면, 이 함수를 사용하여 테스트 해보도록 하자.
728x90