안드로이드(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();
'안드로이드 개발' 카테고리의 다른 글
안드로이드(android) SQLite 데이타 베이스 다루기 (11) | 2013.02.19 |
---|---|
안드로이드(android) 내장, 외장 메모리 사용가능여부와 크기 알아오기 (1) | 2012.12.20 |
안드로이드(android) 에서 sdcard 사용여부 판단하기 (0) | 2012.12.18 |
안드로이드(Android) 에서 TextView 와 WebView 를 이용해 Html 표현하기 (1) | 2012.12.14 |
안드로이드 SDK 에러 났을 때 (2) | 2012.08.27 |
안드로이드 마켓에 어플 유료 등록 절차 (0) | 2011.05.23 |
안드로이드 에러 - Error generating final archive: Debug certificate expired on (5) | 2011.04.20 |
안드로이드에서 타이머 구현 하기 (2) | 2011.04.03 |