본문 바로가기
개발(Development)/Android(안드로이드)

[안드로이드 Java/Kotlin] 커스텀 진동 패턴 및 반복 설정 방법: createWaveform

by 카레유 2021. 7. 15.

이 글에서는

개발자의 "사용자 정의 커스텀" 진동의 패턴 설정 및 반복 실행 방법을 정리한다.

 

안드로이드의 기본(1회) 진동 설정 방법은 아래글을 참고

[안드로이드: Java/Kotlin] 진동 실행 구현 방법: Vibrator, VibrationEffect

 

안드로이드 시스템 제공 진동패턴 사용방법은 아래글 참고

[안드로이드 Java/Kotlin]시스템 기본 제공 진동패턴 사용 방법: createPredefined

 


1. permission 추가

ActivityManifest.xml  파일에 진동 퍼미션을 추가한다.

 

-  <uses-permission android:name="android.permission.VIBRATE"></uses-permission> 

 

 

 

2. Vibrator 객체 얻어오기

안드로이드가 제공하는 SystemService에서 Vibrator 객체를 얻어온다.

 

- Java:  (Vibrator)getSystemService(VIBRATOR_SERVICE); 

- Kotlin:  getSystemService(Context.VIBRATOR_SERVICE) as Vibrator 

 

 

 

3. 진동 실행(+패턴과 반복 설정)

배열로 진동의 패턴과 강도를 설정해주고, 정수 값으로 반복 여부를 설정한다.

 

- Java:  public static VibrationEffect createWaveform (long[] timings, int[] amplitudes, int repeat

- Kotlin:  open static fun createWaveformtimings: LongArray!, amplitudes: IntArray!, repeat: Int): VibrationEffect!

 

 

1) timings: 패턴(대기/진동시간) 설정

: [대기시간ms, 진동시간ms, 대기시간ms, 진동시간ms, ... ]

 

2) amplitudes: 강도 설정

: [0, 진동강도, 0, 진동강도, ...]

: 생략시 디폴트 강도가 적용됨

 

3) repeat: 반복 설정

: -1은 반복 X. 1회만 울리고 반복하지 않는다.

: 0무한 반복. cancel()메서드를 호출하기 전까지 무한 반복한다.

* 반복의 중단은 Vibrator객체.cancel() 메서드를 호출한다.

 

 

- 예시 코드 (Java)

// Vibrator 객체
Vibrator vibrator = (Vibrator)getSystemService(VIBRATOR_SERVICE);


// 1) 패턴
long[] pattern = {2000, 1000, 2000, 2000}; // 2000ms 대기, 1000ms 진동, 2000ms 대기, 2000ms 진동


// 2) 강도
int[] amplitudes = {0, 100, 0, 200}; // 대기, 100강도, 대기, 200 강도


// 3) VibrationEffect 생성(-1: 반복X(
VibrationEffect vibrationEffect = VibrationEffect.createWaveform(pattern, amplitudes, -1);

// 4) 진동 발생
vibrator.vibrate(vibrationEffect);

 

 

- 예시 코드 (Kotlin)

// Vibrator 객체
val vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator;


// 1) 패턴
val pattern = longArrayOf(2000, 1000, 2000, 2000) // 2000ms 대기, 1000ms 진동, 2000ms 대기, 2000ms 진동

// 2) 강도
val amplitudes = intArrayOf(0, 100, 0, 200) // 대기, 100강도, 대기, 200 강도


// VibrationEffect 생성(반복X)
val vibrationEffect = VibrationEffect.createWaveform(pattern, amplitudes, -1)


// 진동 실행
vibrator.vibrate(vibrationEffect)

 

* repeat 매개변수를 0으로 주면 진동이 무한 반복되며, Vibrator객체의 cancel()메서드를 호출해야 중단된다.


 

 

댓글