일단 Alarm 재생파일인 Ogg파일을 울트라 에디터로 보시면 다음과 같은 TAG 부분을 확인할 수 있습니다.

 

위와 같이 파일에서 보시면 ANDROID_LOOP=true TAG부분이 존재하는데 이부분을 파싱을 하여, 무한으로 재생이 되는 것입니다.

 

이 부분에 해당하는 Source부분은 Vorbisplayer.cpp란 부분에 보시면, setdatasource란 함수가 존재할 것입니다. 이 함수에서 아랫부분을 보시면 다음과 같은 소스부분이 존재하게 됩니다.

 

Vorbisplayer.cpp

// look for the android loop tag  (for ringtones)

    char **ptr = ov_comment(&mVorbisFile,-1)->user_comments;

    while(*ptr) {

        // does the comment start with ANDROID_LOOP_TAG

        if(strncmp(*ptr, ANDROID_LOOP_TAG, strlen(ANDROID_LOOP_TAG)) == 0) {

            // read the value of the tag

            char *val = *ptr + strlen(ANDROID_LOOP_TAG) + 1;

            mAndroidLoop = (strncmp(val, "true", 4) == 0);

        }

        // we keep parsing even after finding one occurence of ANDROID_LOOP_TAG,

        // as we could find another one  (the tag might have been appended more than once).

        ++ptr;

    }

    LOGV_IF(mAndroidLoop, "looped sound");

 

    mState = STATE_OPEN

Vorbisplayer.h

   #define ANDROID_LOOP_TAG "ANDROID_LOOP"

위의 부분에서 빨간색 부분을 보시면 ANDROID_LOOP_TAG 부분이 있는데, TAG를 인식하여 LOOP를 돌리도록 처리함으로써 알람 무한 루프가 발생하게 되는 것입니다.

만약 무한 ROOP를 돌리고 싶지 않다면, OGG파일에서 ANDROID_LOOP=truefalse로 돌리시면 됩니다.

'안드로이드' 카테고리의 다른 글

DIP를 px로 변환하기  (0) 2011.04.21
[Service] onStartCommand  (0) 2011.04.06
ForeGround Service  (0) 2011.04.04
Thread  (0) 2011.03.24
윈도우 환경에서 CTS 돌리기  (0) 2011.03.11

+ Recent posts