Android

안드로이드 진동

Machine_웅 2018. 5. 21. 18:09
728x90
반응형

안드로이드: Vibrator (진동) 사용 예제


안드로이드의 Vibrator 객체를 사용하여,  원하는 패턴의 진동을 만들어 내고, 컨트롤 하는 예제를 만들어 봅니다.


Step 1 : Manifect 에 Vibrator 권한을 획득해야 합니다.

Step 2 : Vibrator 객체 획득

Step 3 : vibrate() 메소드로 진동시작,  cancel() 메소드로 진동취소





[AndroidManifest.xml]

우선 안드로이드 메니페스트 파일 에  Vibrator 사용권한을 얻어옵니다.

상단에 한줄만 추가하면 됩니다

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



[activity_main.xml]


간단하게 테스트할 액티비티 하나 만들어 보죠

버튼 4개만 만들어서 몇가지 패턴의 진동을 테스트 해볼겁니다.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="진동1" />

<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="진동2" />

<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="진동3" />

<Button
android:id="@+id/button4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="진동4" />

</LinearLayout>








[MainActiviy.java]


다음으로 메인 액티비티 클래스 파일입니다.  (노란색 부분에 주목)

- 먼저 Vibrator 객체를 getSystemService() 를 통해 얻어오고

- vibrate() 메소드를 통해 진동을 시작합니다.   이때 매개변수로 전달되는 long 타입 값은 millisecond (1/1000 초) 단위입니다.

- long[] 배열을 통해 원하는 진동 패턴을 만들어 줄수 있습니다.   배열값은 대기시간 - 진동시간 - 대기시간 - 진동시간... 순...

- cancel() 메소드로 언제든지 진동취소 합니다.

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

Button b1 = (Button)findViewById(R.id.button1);
Button b2 = (Button)findViewById(R.id.button2);
Button b3 = (Button)findViewById(R.id.button3);
Button b4 = (Button)findViewById(R.id.button4);

// 진동
// 1. 진동 권한을 획득해야한다. AndroidManifest.xml
// 2. Vibrator 객체를 얻어서 진동시킨다
final Vibrator vibrator = (Vibrator)getSystemService(Context.VIBRATOR_SERVICE);

b1.setText("1초진동");
b1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
vibrator.vibrate(1000); // miliSecond, 지정한 시간동안 진동
}
});

b2.setText("지정한 패턴으로 진동");
b2.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
long[] pattern = {100,300,100,700,300,2000}; // miliSecond
// 대기,진동,대기,진동,....
// 짝수 인덱스 : 대기시간
// 홀수 인덱스 : 진동시간
vibrator.vibrate(pattern, // 진동 패턴을 배열로
-1); // 반복 인덱스
// 0 : 무한반복, -1: 반복없음,
// 양의정수 : 진동패턴배열의 해당 인덱스부터 진동 무한반복
}
});

b3.setText("무한반복으로 진동");
b3.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
vibrator.vibrate(
new long[]{100,1000,100,500,100,500,100,1000}
, 0);
}
});

b4.setText("진동 취소");
b4.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
vibrator.cancel(); // 진동취소
}
});
} // end of onCreate
} // end of class


출처: http://bitsoul.tistory.com/129 [Happy Programmer~]

출처: http://bitsoul.tistory.com/129 [Happy Programmer~]

출처: http://bitsoul.tistory.com/129 [Happy Programmer~]

 

728x90
반응형