15.Vibrator

Edit

15.1Vibrator 소개

Vibrator는 모바일 장치의 진동 기능을 사용할 수 있게 해주는 오브젝트입니다. 사용자는 제공되는 속성과 메소드를 사용해 단순 진동뿐 아니라 원하는 진동 패턴을 만들 수 있습니다.

15.2진동 발생시키기

모바일 장치에서 진동을 발생시키려면 play 메소드를 호출하고 진동을 멈추려면 stop 메소드를 호출합니다.

15.2.1예제

진동 반복 회수를 입력한 후 Play 버튼을 터치하면 입력한 숫자만큼 진동이 반복됩니다. 0을 입력하면 무한 반복되며 진동이 발생할 때마다 하단에 로그메시지가 출력됩니다. 진동 발생 중 Stop 버튼을 터치하면 진동이 멈춥니다.

그림 15-1demo_vibrator_01

15.2.2예제에서 사용한 핵심 기능

Vibrator > hasVibrator 메소드

진동 기능을 사용할 수 있는지 확인하는 메소드입니다.

Vibrator > repeatcount 속성

진동 패턴의 반복 횟수를 설정하는 속성입니다. 속성 값을 설정하지 않으면 1로 적용되며, 0으로 설정시 진동이 무한 반복됩니다.

Vibrator > play 메소드

진동을 발생시키는 메소드입니다. patterns 속성에 설정된 패턴대로 repeatcount 속성에 설정된 값만큼 반복하여 진동을 발생시킵니다.

Vibrator > stop 메소드

진동을 멈추는 메소드입니다.

15.2.3예제 구현 방법

1

화면 구성하기

Vibrator 오브젝트를 선택한 후 디자인 화면을 클릭하여 추가합니다. 추가된 Vibrator 오브젝트는 Invisible Object 창에서 확인할 수 있습니다.

화면을 구성하기 위한 Static, Button 컴포넌트와 반복 회수를 입력받을 Edit 컴포넌트를 예제의 그림과 같이 적절히 배치합니다.

화면 구성을 위해 사용한 컴포넌트 및 오브젝트는 다음과 같습니다.

컴포넌트/오브젝트

ID

Vibrator

Vibrator00

Static

stt_count

Edit

edt_count

Button

btn_vibPlay

btn_vibStop

TextArea

TextArea00

2

사용자 함수 작성하기

진동시마다 몇 번째 진동인지 로그 메시지로 출력하기 위한 전역 변수인 numCount를 선언하고 동작 수행시마다 타이머, 변수를 초기화 할 initData 함수를 선언합니다.

//Global Variable
var numCount = 0;

//Variables initialization function
this.initData = function()
{
    this.killTimer(0);
    numCount = 0;
    this.TextArea00.set_value(this.TextArea00.value +"\n");
};

정해진 시간 간격으로 로그 메시지를 TextArea에 출력하는 timer 함수를 선언합니다.

//Functions that are called repeatedly at specified time intervals
this.timer = function()
{ 
    if(this.Vibrator00.repeatcount == 0 || numCount < this.Vibrator00.repeatcount)
    {
        numCount++;
        this.TextArea00.set_value(this.TextArea00.value +"\nVibration occurs: "+ numCount +" times");
        this.TextArea00.scrollBy(0, this.TextArea00.getVScrollPos()+19);
        
    }
    else
    {
        this.initData();
    }
};

3

Form 이벤트 함수 작성하기

  • oninit 이벤트 함수

폼 로딩 후 로그 메시지를 출력하기 전 TextArea를 초기화합니다.

this.sample_vibrator_01_oninit = function(obj:nexacro.Form,e:nexacro.EventInfo)
{
    this.TextArea00.set_value("");
};
  • ontimer 이벤트 함수

지정된 시간 간격마다 timer 함수를 호출합니다.

this.sample_vibrator_01_ontimer = function(obj:nexacro.Form,e:nexacro.TimerEventInfo)
{
    if(e.timerid == 0)
    {
        this.timer();
    }    
};

4

Play 버튼 이벤트 함수 작성하기

Play 버튼의 onclick 이벤트 함수를 다음과 같이 작성합니다. 모바일 장치의 진동 기능을 사용할 수 있는지 확인 후 사용자가 설정한 반복 회수만큼 진동 기능을 수행합니다.

this.btn_vibPlay_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
    if(this.Vibrator00.hasVibrator())
    {
        var repeatCount = this.edt_count.value;
        
        if(repeatCount !== null && repeatCount !== "")
        {
            this.Vibrator00.set_repeatcount(repeatCount);
            this.Vibrator00.play();
        }
        else
        {
            alert("Please enter the count of repeat for vibration.");
        }
    }
    else
    {
        alert("Vibration function is not available.");
    }
};

5

Stop 버튼 이벤트 함수 작성하기

Stop 버튼의 onclick 이벤트 함수를 다음과 같이 작성합니다. 모바일 장치의 진동 기능을 중지합니다.

this.btn_vibStop_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
    this.Vibrator00.stop();
};

6

Vibrator 이벤트 함수 작성하기

  • onplay 이벤트 함수

Vibrator 오브젝트의 play 메소드가 호출되면 발생하는 이벤트입니다. 사용자가 play를 수행하면 로그 메시지를 출력하기 위해 타이머를 설정합니다.

this.Vibrator00_onplay = function(obj:nexacro.Vibrator,e:nexacro.VibratorEventInfo)
{
    this.setTimer(0, 200);
};
  • onstop 이벤트 함수

Vibrator 오브젝트의 stop 메소드가 호출되면 발생하는 이벤트입니다. 사용자가 stop을 수행하면 초기화 함수를 호출합니다.

this.Vibrator00_onstop = function(obj:nexacro.Vibrator,e:nexacro.VibratorEventInfo)
{
    this.initData();
};
  • onerror 이벤트 함수

Vibrator 오브젝트 기능 수행시 오류가 발생하면 발생하는 이벤트입니다. 오류 코드를 TextArea로 출력합니다.

this.Vibrator00_onerror = function(obj:nexacro.Vibrator,e:nexacro.VibratorErrorEventInfo)
{
    var strResult = "\n> Vibrator00_onerror()"
    +"\n["+ e.errortype +"] "+ e.statuscode +" "+ e.errormsg;

    this.TextArea00.set_value(this.TextArea00.value + strResult);
};

7

Edit 컴포넌트 이벤트 함수 작성하기

Edit 컴포넌트의 onkeydown 이벤트 함수를 다음과 같이 작성합니다. 가상 키보드의 엔터키 입력을 처리합니다.

this.edt_count_onkeydown = function(obj:nexacro.Edit,e:nexacro.KeyEventInfo)
{
    if(e.keycode == "13")
    {            
        this.btn_vibPlay_onclick();
        this.btn_vibPlay.setFocus();
    }        
};

8

모바일 장치에서 확인하기

진동 반복 회수를 입력하고 Play 버튼을 터치하여 입력한 회수만큼 진동이 반복되는지 확인합니다. 0을 입력하여 무한히 진동이 반복되는지 확인하고 Stop 버튼을 터치하여 진동이 멈추는지 확인합니다.

15.3진동 패턴 설정하기

진동을 원하는 패턴으로 설정하여 발생시키고 싶을 때는 patterns 속성을 사용합니다.

iOS 환경에서는 patterns 속성이 동작하지 않고 iOS에서 제공하는 진동 패턴이 적용됩니다.

15.3.1예제

진동 패턴을 다음과 같이 숫자와 쉼표(,)로 입력한 후 Play 버튼을 터치하여 진동을 발생시킵니다. 진동을 멈추려면 Stop 버튼을 터치합니다.

진동 패턴은 무진동, 진동의 쌍으로 이뤄집니다. 예를 들어, "200,1000,200,500"과 같이 패턴을 입력하면 200ms 동안 무진동, 1000ms 동안 진동, 200ms 동안 무진동, 500ms 동안 진동이 발생합니다.

그림 15-2Screenshot_20180802-164102

15.3.2예제에서 사용한 핵심 기능

Vibrator > hasVibrator 메소드

모바일 장치가 진동 기능을 사용할 수 있는지 확인하는 메소드입니다.

Vibrator > patterns 속성

진동 패턴을 설정하는 속성입니다. 패턴 값은 무진동, 진동의 쌍으로 이루어진 배열 형태로 설정합니다. 예를 들어, "10, 100, 20, 200"와 같이 설정하면 10ms 동안 무진동, 100ms 동안 진동, 20ms 동안 무진동, 200ms 동안 진동이 발생합니다. iOS에서는 지원하지 않는 기능입니다.

Vibrator > play 메소드

진동을 발생시키는 메소드입니다. patterns 속성에 설정된 패턴대로 repeatcount 속성에 설정된 값만큼 반복하여 진동을 발생시킵니다.

Vibrator > stop 메소드

진동을 멈추는 메소드입니다.

15.3.3예제 구현 방법

1

화면 구성하기

Vibrator 오브젝트를 선택한 후 디자인 화면을 클릭하여 추가합니다. 추가된 Vibrator 오브젝트는 Invisible Object 창에서 확인할 수 있습니다.

화면을 구성하기 위한 Static, Button 컴포넌트와 반복 회수를 입력받을 Edit 컴포넌트를 예제의 그림과 같이 적절히 배치합니다.

화면 구성을 위해 사용한 컴포넌트 및 오브젝트는 다음과 같습니다.

컴포넌트/오브젝트

ID

Vibrator

Vibrator00

Static

stt_pattern

Edit

edt_pattern

Button

btn_vibPlay

btn_vibStop

2

Play 버튼 이벤트 함수 작성하기

Play 버튼의 onclick 이벤트 함수를 다음과 같이 작성합니다. 모바일 장치의 진동 기능을 사용할 수 있는지 확인하고 사용자가 설정한 진동 패턴대로 진동 기능을 수행합니다.

this.btn_vibPlay_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
    if(this.Vibrator00.hasVibrator())
    {
        var strInput = this.edt_pattern.value;
        
        if(strInput !== null && strInput !== "")
        {

            var arrPattern = strInput.split(",");
        
            this.Vibrator00.set_patterns(arrPattern);                
            this.Vibrator00.play();
        }
        else
        {
            alert("Please enter a vibration pattern.");
        }        
    }
    else
    {
        alert("Vibration function is not available.");
    }
};

3

Stop 버튼 이벤트 함수 작성하기

Stop 버튼의 onclick 이벤트 함수를 다음과 같이 작성합니다. 모바일 장치의 진동 기능을 중지합니다.

this.btn_vibStop_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo)
{
    this.Vibrator00.stop();
};

4

Vibrator 오브젝트의 onerror 이벤트 함수 작성하기

Vibrator 오브젝트 기능 수행시 오류가 발생하면 발생하는 이벤트입니다. 오류 코드를 출력합니다.

this.Vibrator00_onerror = function(obj:nexacro.Vibrator,e:nexacro.VibratorErrorEventInfo)
{
    var strResult = "\n> Vibrator00_onerror()"
    +"\n["+ e.errortype +"] "+ e.statuscode +" "+ e.errormsg;

    alert(strResult);
};

5

Edit 컴포넌트 이벤트 함수 작성하기

Edit 컴포넌트의 onkeydown 이벤트 함수를 다음과 같이 작성합니다. 가상 키보드의 엔터키 입력을 처리합니다.

this.edt_count_onkeydown = function(obj:nexacro.Edit,e:nexacro.KeyEventInfo)
{
    if(e.keycode == "13")
    {            
        this.btn_vibPlay_onclick();
        this.btn_vibPlay.setFocus();
    }        
};

6

모바일 장치에서 확인하기

진동 패턴을 입력하고 Play 버튼을 터치하여 입력한 패턴대로 진동이 발생하는지 확인합니다. 진동 발생중 Stop 버튼을 터치하여 진동이 멈추는지 확인합니다.