진동의 시간과 강도를 설정하여
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
'개발(Development) > Android(안드로이드)' 카테고리의 다른 글
[안드로이드 Java/Kotlin] 커스텀 진동 패턴 및 반복 설정 방법: createWaveform (0) | 2021.07.15 |
---|---|
[안드로이드] Button 영어 대문자만 표시될 때 소문자 변경 방법 (0) | 2021.07.15 |
[안드로이드] 스마트폰 기기 연결/빌드/실행하는 방법 (0) | 2021.07.15 |
[안드로이드] this와 MainActivity.this의 개념, 차이 (0) | 2021.07.13 |
[안드로이드] LayoutParams(레이아웃 파라미터) 개념과 구조/종류 (0) | 2021.07.12 |
댓글