티스토리 뷰



이 자료들은 팁스소프트에서 제공하는 [ 알짜배기 ] 프로그램을 이용하면 더 편리하게 볼수 있습니다.
* 알짜배기 프로그램 받기 - http://www.tipssoft.com/bulletin/tb.php/QnA/8406
* 관리자의 Tipssoft 이야기를 들어보세요 ( 트위터 ID : tipssoft )
* 안드로이드 강좌 목록 - http://www.tipssoft.com/bulletin/tb.php/old_bbs/501
휴대가 가능한 대부분의 안드로이드용 기기들은 공공장소나 조용한 곳에서 기기를 사용할 때 불편하지
않도록 매너모드를 제공하고 있습니다. 매너모드 상태의 기기는 사용자에게 무언가를 알릴때 소리를
울리는 대신 진동을 발생시켜서 알려줍니다. 매너모드뿐만 아니라 게임이나 다른 어플리케이션에서도
좀더 강력한 효과를 발생시키기 위해서 진동을 사용하기도 합니다.
이번 강좌에서는 알림, 효과용 등 여러가지 용도로 사용되는 진동에 대하여 알아보도록 하겠습니다.
1. 기능 구현하기
진동을 울리는 기능은 시스템에서 서비스하는 일이기때문에 먼저 AndroidManifest.xml
파일에 아래의 코드를 추가하여 이 어플리케이션이 해당 기능을 사용할 수 있도록 권한을
부여해주어야 합니다.
<manifest>
// ... 생략 ...
<application>
// ... 생략 ...
</application>

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

</manifest>
진동 울리기 기능을 사용하려면 먼저 시스템서비스로부터 Vibrator 객체를 얻어야하며 Vibrator
클래스의 vibrate 메소드를 이용하여 진동을 쉽게 발생시키고, cancel 메소드로 울리고 있는 진동을
멈출 수 있습니다.
진동을 발생시키는 vibrate 메소드는 다음과 같은 두개의 메소드로 오버로딩되어 있습니다.
public void vibrate (long milliseconds) // 지정시간 동안 진동을 울린다.
public void vibrate (long[] pattern, int repeat) // 배열에 지정한 패턴대로 진동을 울린다.
인자가 하나인 vibrate 메소드는 지정한 밀리초만큼 진동을 발생시키고, 두번째 vibrate 메소드는
pattern 인자에 입력한 패턴대로 진동을 발생시키는 메소드입니다.
패턴 진동을 지원하는 vibrate 메소드를 사용하려면 배열을 구성할 때 다음과 같은 규칙을 고려하여야
합니다.
위의 그림처럼 구성되는 배열의 짝수 index 에는 대기 시간을 지정하고, 홀수 index 에는 진동 시간을
지정해주어야합니다.
또 두번째 매개 변수인 repeat 에는 반복을 시작할 index 를 명시해줍니다. 이 때 주의해야할 점은
시작되는 index 부터 대기 시간이 적용되기 때문에 울림시간과 대기시간이 생각한것과 반대로 적용될
수 있다는 것입니다. 예를들어 위의 그림과 같은 배열 구성이 있는 경우 repeat 에 1 을 명시하면 아래의
그림처럼 기존의 진동 패턴과 완전히 달라지게 됩니다.
만약 구성한 배열 그대로 반복하여 진동을 울리고 싶다면 repeat 에 0 을 명시하시고, 한번만 진동을
울리려면 -1 을 명시하시면 됩니다.
아래의 코드는 두가지 vibrate 메소드를 사용하여 진동을 울리는 예제입니다.
public class TestVibratorActivity extends Activity implements OnClickListener
{
Vibrator m_vibrator = null;

public void onCreate(Bundle savedInstanceState)
{
// ... 생략 ...

// 시스템서비스로부터 진동을 울릴 수 있는 Vibrator 객체를 얻는다.
m_vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
}

public void onClick(View view)
{
int id = view.getId();

if(id == R.id.once_btn) { // 지정된 시간만큼 진동이 울려야 하는 경우
// 에디트텍스트를 얻어서 입력된 수치값을 구한다.
EditText edit = (EditText) findViewById(R.id.num_edit);
String str = edit.getText().toString();

// 지정된 수치값만큼 진동을 발생시킨다.
m_vibrator.vibrate(Integer.parseInt(str));

} else if(id == R.id.go_btn) { // 지정된 패턴대로 진동이 울려야 하는 경우
// 진동 패턴을 구성한다.
long[] pattern = {50, 100, 100, 200, 100, 300};

// 구성한 패턴대로 진동을 발생시킨다.
// 첫 진동패턴은 50ms 을 대기하면서 시작하고,
// 두번째 진동패턴부터는 100ms 을 대기하면서 진동이 시작된다.
m_vibrator.vibrate(pattern, 1);
} else if(id == R.id.cancel_btn) { // 진동이 중지되어야 하는 경우
// 진동을 중지시킨다.
m_vibrator.cancel();
}
}
}
2. 실행 화면


댓글