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

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

by 카레유 2021. 7. 15.

진동의 시간과 강도를 설정하여

1회의 진동을 실행 중단 시키는 방법을 정리한다.

 

진동의 패턴과 반복을 설정하는 방법은 이 글을 참고


# 안드로이드 앱 개발: 진동(Vibrate)

매니페스트에 VIBRATE 퍼미션을 추가해주고, Java/Kotlin 파일에서 진동을 울려주는 코드를 작성하면 된다.

 

1. 퍼미션 설정

- 대상 파일: AndroidManifest.xml

- 추가 권한:

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

* uses-permission 은 manifest 태그의 바로 하위 항목(application과 동일 계위)로 추가하면 된다.

 

 

2. 진동 설정

- 대상 파일: MainActivity.java | MainActivity.kt

- 작성 코드:

1) SystemService에서 Vibrator 객체를 얻어온다.

- Java:  (Vibrator)getSystemService(VIBRATOR_SERVICE); 

- Kotlin:  getSystemService(Context.VIBRATOR_SERVICE) as Vibrator 

 

2) vibrate() 메서드를 호출해준다.

- Java:   public void vibrate (VibrationEffect vibe) 

- Kotlin:  open fun vibrate(vibe: VibrationEffect!): Unit 

 

3) VibrationEffect 매개변수로 진동 시간과 강도를 설정한다.

- Java:  public static VibrationEffect createOneShot (long milliseconds, int amplitude) 

- Kotlin:  open static fun createOneShot(milliseconds: Long, amplitude: Int): VibrationEffect! 

* milliseconds : 진동 시간. 양의 실수를 설정한다.

* amplitude: 진동 강도. 1~255 사이의 정수를 설정한다.

 

 

3. 진동 중단

진동이 울리고 있는 동안에 중단 시키려면 cancel() 메서드를 호출해주면 된다.

- Java :  public abstract void cancel() 

- Kotlin:  abstract fun cancel(): Unit 

 


# 코드 전문

* AndroidManifest.xml (매니페스트)

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.projectstudy_java">
    
    <!-- .. 생략 ... -->
    <!-- android.permission.VIBRATE 퍼미션 추가 -->
    <uses-permission android:name="android.permission.VIBRATE"></uses-permission>

</manifest>

 

* MainActivity.java (자바 코드)

public class MainActivity extends AppCompatActivity{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        // 버튼을 하나 만들어서 (레이아웃.xml파일에 생성해둔 버튼)
        Button btnVibrate = findViewById(R.id.btnVibrate);
        
        // 클릭하면 진동이 울리게 설정
        btnVibrate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
            
                // 1. Vibrator 객체 생성
                Vibrator vibrator = (Vibrator)getSystemService(VIBRATOR_SERVICE);
                
                // 2. 진동 구현: 1000ms동안 100 강도의 진동
                vibrator.vibrate(VibrationEffect.createOneShot(1000,100));

            }
        });

    }
}

 

- MainActivity.kt (Kotlin 코드)

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main);

        // 버튼을 클릭하면 진동이 울리게 작성
        findViewById<Button>(R.id.button).setOnClickListener {
        
            // 1. Vibrator 객체를 얻어온 다음
            val vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator;
            
            // 2. 진동 구현: 1000ms 동안 100의 강도로 울린다.
            vibrator.vibrate(VibrationEffect.createOneShot(1000, 100));
        }

    }
}

 

 

- activity.main.xml (레이아웃)

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Vibrate"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.5"
        app:layout_constraintHorizontal_bias="0.5" />

</androidx.constraintlayout.widget.ConstraintLayout>

 

- 실행 결과: 버튼을 누르면 진동이 1000ms의 시간동안 100 의 강도로 울린다.

 


이 외에도 다양한 진동 메서드와 효과가 있다.

이에 대해서는 아래의 레퍼런스 참고

 

Vibrator 레퍼런스

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

 

VibrationEffect 레퍼런스

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

 

 

 

 

댓글