본문 바로가기

Android

[Android] 진동컨트롤(Vibrator)

https://developer.android.com/reference/android/os/Vibrator

 

Vibrator  |  Android Developers

 

developer.android.com

 

자 형태의 커스텀뷰를 만들고,

눈금을 한 칸 이동할 때마다 진동효과를 주고 싶었다.

커스텀뷰는 콜백으로 칸이 이동될 때마다 정수형 값을 넘겨주는 구조였다.

 

값계산과 렌더링이 모두 처리된 다음 콜백으로 넘겨주는 것이기 때문에

View 가 아닌 Activity 에 진동관련 코드를 넣었다.(역할분담)

 

1. onCreate 이후에 Vibrator 객체를 만든다.

private Vibrator vibrator = null;
...
@Override
    protected void onResume() {
        super.onResume();

        vibrator = (Vibrator)getSystemService(Context.VIBRATOR_SERVICE);

    }

 

2. Vibrator.vibrate() 를 이용한다.

 

deprecated 된 같은 이름의 메서드가 많으니 설명을 잘 읽어보자.

runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        
                        //진동과 관련없는 코드. 정수형으로 들어온 값을 EditText 에 표기함.
                        heightField.setText(Integer.toString(value));
                        
                        //Activity 에서 제어하는 boolean 변수가 true 라면 콜백 작동 시 조건대로 진동
                        //조건 : VibrationEffect.createOneShot(milliSeconds, 0~255 진동강도)
                        if (enableVibrate) {
                            vibrator.vibrate(VibrationEffect.createOneShot(10, 100));
                        }
                    }
                });

 

2번 코드는 콜백 안의 코드이고,

콜백 -> runOnUiThread(...) 시작 -> 10ms 동안 100/255 강도로 진동.