Please Enable JavaScript!
Gon[ Enable JavaScript ]

안드로이드(Android) 전화기 알림 진동 모션 구현하기

안드로이드 개발

안드로이드(Android) 전화기 알림 진동 모션 구현하기

 

개발환경 : JDK 1.6, Android API 4.1, window 7

 

전화가의 알림기능은 여러가지가 있다.

상태 표시줄을 이용한 알림, 전화기 진동, 지시등 깜박이기

소리내기, 맞춤형 알람 등등이 있는데 이것들에 대해서 하나씩

알아보도록 한다.

그중에서 이번엔 전화기 진동에 관한 내용이다.

 

1. 응용프로그램에서 진동을 사용하기 위한 조건

 

(1) Xml 설정추가

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

 

(2) 소스에서 추가

Import android.os.Vibrator;

 

2. 진동에 관련된 속성값

 

Android.os.Vibrator  클래스가 진동에 관련된 기능을 수행한다.

각 함수를 설명하자면 다음과 같다.

# Cancel() : 진동을 끈다

# hasVibrator() : 기기에 진동기능을 할수 있는지 체크한다.

# vibrate(long milliseconds) : 파라미터로 넘겨야하는 ms 값은 진동 주기인 시간을

밀리세컨드 단위(1/1000)의 값을 넘기면 된다.

# vibrate(long[] pattern, int repeat) : 위 함수는 진동이 한번만 수행된다. 반복적인

알림을 하기 위해서는 이함수를 필요로 한다.

2개의 파라미터중  repeat 는 반복횟수이고 long[] pattern

배열에 들어간 값이 하나의 단위가 되어서 그 단위가 반복하는 형태가 된다.

그런데 그 안에서 진동시간만 반복되는 것이 아니라 진동시간, 무진동시간의 패턴이

쌍으로 해서 추가 하게 된다.

예를 들어 pattern = {진동시간,무진동시간} 이므로 pattern = {1000, 500, 1000, 200}

이면 1초진동, 0.2초 무진동, 1초진동, 0.5초 무진동 이 되는 것이다.

 

3. 구현

 

예전에는 인터페이스 클래스를 통해 기기에 바로 접근해서 사용할 수가 있었다.

Vibrator 도 아래 소스처럼 android.os.IvibratorService 인터페이스를 생성해

스레드를 만들고 직접 해당 소스를 넣을 수가 있었다. 하지만 Android 4.1 부터는

다른 패키지에 위치시켰는지 아니면 삭제 했는지 아예보이지 않으며

아래 소스를 쓸수가 없다.


public class AndroidVibrator extends Activity {
        android.os.IVibratorService myVibratorService = null;
 
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle icicle) {
                super.onCreate(icicle);
                setContentView(R.layout.main);
 
                // Receive the VibratorManagerService
                myVibratorService = android.os.IVibratorService.Stub
                                .asInterface(ServiceManager.getService("vibrator"));
 
                // Do a short (100ms) vibration.
                try {
                        myVibratorService.vibrate(100);
                } catch (DeadObjectException e) { }
        }
}

new Thread(){
	@Override
        public void run(){
            try {
               while(!isInterrupted()){
                   myVibratorService.vibrate(500);
                   Thread.sleep(1000);
               }
            } catch (Exception e) { }
        }
}.start();

 

첫번째 예제는 패턴을 통해서 진동을 실행한다. 반복실행하지 않으며

SOS 모호스 부호를 패턴으로 만들어 실행한 것이다.

 

// 현재 Context 로 부터 Vibrator 인스턴스를 가져온다
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
		 
// 패턴에 시간값을 넣는데 단위는 milliseconds 이다 
// SOS 에 대한 모호스 부호를 위해 패턴을 만들었다
int dot = 200;     
int dash = 500;   
int short_gap = 200; 
int medium_gap = 500;
int long_gap = 1000;   
long[] pattern = {
    0,  // Start immediately
    dot, short_gap, dot, short_gap, dot,    // s
    medium_gap,
    dash, short_gap, dash, short_gap, dash, // o
    medium_gap,
    dot, short_gap, dot, short_gap, dot,    // s
    long_gap
};
 
// 한번만 실행되게 설정한 것이다. -1 은 반복을 하지 않는다는 표시이다.
v.vibrate(pattern, -1);

 

두번째 예제는 취소할 때 까지 반복하게 설정한 것이다.

// 인스턴스를 가져온다
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
 
// 시작은 0 이므로 즉시 실행되고 진동 200 milliseconds, 멈춤 500 milliseconds 된다
long[] pattern = { 0, 200, 500 };
 
// 파라미터로 0 취소할떄 까지 무한반복을 나타낸다.
v.vibrate(pattern, 0);

//어느 순간에 취소하고 싶다면 아래 코드 cancel() 함수를 실행하면 된다.  
v.cancel();
Posted by 녹두장군

댓글을 달아 주세요