일단 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");
Vorbisplayer.h
#define ANDROID_LOOP_TAG "ANDROID_LOOP"
위의 부분에서 빨간색 부분을 보시면 ANDROID_LOOP_TAG 부분이 있는데, TAG를 인식하여 LOOP를 돌리도록 처리함으로써 알람 무한 루프가 발생하게 되는 것입니다.
만약 무한 ROOP를 돌리고 싶지 않다면, OGG파일에서 ANDROID_LOOP=true를 false로 돌리시면 됩니다.'안드로이드' 카테고리의 다른 글
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 |