1. 진동 함수

 

진동 테스트는 무척 단순합니다.

 

진동을 일으키는 방법은 3가지가 있습니다.

 

첫째는 정해진 시간 만큼 한번 작동시키기

 

둘쨰는 정해진 패턴으로 한번 작동 시키기

 

마지막 세번째는 정해진 패턴으로 반복 작동 시키기


입니다.

 

모두 vibrate( ) 함수를 사용하는데 어떤 parameter 를 넘겨 주느냐에 따라

작동법이 달라 집니다.

 

첫번째 한번 작동은 param으로 milliseconds를 넘겨 줍니다.

   vibrate(1000);  // 10001초 입니다.

 

두번째와 세번째는 정해진 패턴의 longmilliseconds의 배열을 넘겨 줍니다.


배열의 형태는

long[] vloop = {0, 500, 100, 500, 100,….}; //5000.5초 입니다.

이고


배열 값의 의미는 {무진동 시간, 진동 시간, 무진동 시간, 진동 시간, ……}

배열 이므로 원하는 만큼 원하는 숫자를 기입하면 됩니다.


그리고 두번째 param에 따라 반복 여부가 결정 됩니다.


-1 이면 1회 진동, 0이상이면 반복 진동입니다.

vibrate(패턴, -1);   //1회 패턴 진동

vibrate(패턴, 0이상); //패턴 반복 진동


그런데 여기서 반복 진동도 2가지 종류로 나누어 집니다.

물론 핸드폰마다 조금씩 다른데, 정상적으로(동일 패턴) 무한 반복하는 것도 있습니다.


함수 사용

 진동 방식

 진동 형태

 vibrate(패턴, -1);

 패턴 1회 진동

 패턴 시간씩 진동/ 종료

 vibrate(패턴, 0);

 패턴 반복 진동

 패턴 시간씩 진동/ 패턴 시간씩 진동

 vibrate(패턴, 1);

 패턴 반복 진동

 패턴 시간씩 진동/ 짧은 시간씩 진동

 vibrate(패턴, 2);

 패턴 반복 진동

 패턴 시간씩 진동/ 패턴 시간씩 진동

 vibrate(패턴, 3);

 패턴 반복 진동

 패턴 시간씩 진동/ 짧은 시간씩 진동

 vibrate(패턴, 4);

 패턴 반복 진동

 패턴 시간씩 진동/ 패턴 시간씩 진동

 ...

  ...

  ...


이런 진동 형태가 반복이 되는데


0, 2, 4, … 짝수의 값은 패턴에 기입한 시간의 패턴이 무한 반복이 되지만


1, 3, 5,… 홀수 값일 경우에는 최초에만 정해진 시간 패턴으로 진동을 하고

그 다음 부터는 매우 짧게 틱, , 틱 하는 정도로만 진동을 합니다.

 


2. 진동 테스트 프로그램

 

2.1 진동 사용 허가


핸드폰의 진동자를 사용하기 위해서는 사용허가를 해야 합니다.


AndroidManifest.xmlpermission을 추가 합니다.


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.desk.vibrator">

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

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>


2.2 Layout 작성

 

기능이 단순해서 vibrate( ) 함수의 parameter 별로 버튼을 만들었습니다.


[1], [패턴 1], [패턴 반복], [종료]


<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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:layout_marginStart="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginBottom="8dp"
        android:text="1초"
        app:layout_constraintBottom_toTopOf="@+id/button2"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.621" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginBottom="48dp"
        android:text="패턴"
        app:layout_constraintBottom_toTopOf="@+id/button3"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

    <Button
        android:id="@+id/button3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginBottom="48dp"
        android:text="반복"
        app:layout_constraintBottom_toTopOf="@+id/button4"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

    <Button
        android:id="@+id/button4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginBottom="96dp"
        android:text="종료"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

</android.support.constraint.ConstraintLayout>


 

2.3 Main Source

 

Vibrator를 선언하고 버튼을 눌러 진동을 테스트 합니다.

 

추가로 바탕을 터치해도 진동이 되도록 했습니다.


@Override

    public boolean onTouchEvent(MotionEvent event) { }


단순해서 머 더 설명할게 없습니다.


package com.example.desk.vibrator;

import android.content.Context;
import android.os.Vibrator;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

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

        Button btn1 = (Button)findViewById(R.id.button);
        Button btn2 = (Button)findViewById(R.id.button2);
        Button btn3 = (Button)findViewById(R.id.button3);
        Button btn4 = (Button)findViewById(R.id.button4);
        btn1.setOnClickListener(this);
        btn2.setOnClickListener(this);
        btn3.setOnClickListener(this);
        btn4.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        Vibrator vibrator = (Vibrator)getSystemService(Context.VIBRATOR_SERVICE);
        long[] vloop = {0, 500, 100, 500, 100, 500, 100};
        if(v.getId() == R.id.button) {
            vibrator.vibrate(1000);  //1초 작동
        } else if(v.getId() == R.id.button2) {
            vibrator.vibrate(vloop, -1); //패턴 1회 작동
        } else if(v.getId() == R.id.button3) {
            vibrator.vibrate(vloop, 0); //패턴 반복
        } else if(v.getId() == R.id.button4) {
            vibrator.cancel();
        }
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        int action = event.getAction();
        final Vibrator vibrator = (Vibrator)getSystemService(Context.VIBRATOR_SERVICE);
        switch(action) {
            case MotionEvent.ACTION_DOWN :    //화면을 터치했을때 이벤트
                vibrator.vibrate(new long[] {0,100}, 0);  //계속 진동
                break;
            case MotionEvent.ACTION_UP :      //화면을 터치했다 땠을때 이벤트
                vibrator.cancel();  //진동 취소
                break;
            case MotionEvent.ACTION_MOVE :    //화면을 터치하고 이동할때 이벤트
                vibrator.vibrate(new long[] {0,100}, 0);  //계속 진동
                break;
        }
        return super.onTouchEvent(event);
    }
}



3. 결과

 


3.1 결과 화면


버튼과 바탕화면을 클릭 또는 이동 하면서 테스트 하세요.


android vibrator sensor


3.2 Source Code

 

 

Vibrator.7z



3.3 APK File


Vibrator.apk


- copy coding -


+ Recent posts