2011-09-27 2 views
3

나는 이것을 알아 내려고 많은 시간을 보냈다 :미디어를 처음 재생할 때 MediaPlayer OnCompletion이 실행되는 이유는 무엇입니까?

MediaPlayer가 처음으로로드되고 시작될 때, 그 OnCompletion이 호출된다. 이전 트랙이 끝났을 때 다음 트랙으로 건너 뛰는 코드가 있기 때문에 이것은 문제입니다.

OnCompletion 수신기의 플래그를 사용하여 해결했지만 그 이유는 무엇입니까? , onCompletion이 바로이 후 재생되는 첫 번째 트랙은 비록 방법() 플레이에서 반환 한 후 호출 할 어떤 이유

 mp.setDataSource(mCurrentMediaFile); 
     mp.prepare(); 
     mDuration = mp.getDuration(); 
     int seek = mDuration * position/1000; 
     mp.seekTo(seek); 
     mp.start(); 

:

이 조각은 내 서비스에서 플레이() 메소드에서입니다 서비스가 생성됩니다.

+0

안녕하세요, 여기에 문제가 있다는 것을 알았습니까? 나는 비슷한 문제가있다. OnComletion은 mp.reset() 후에 호출됩니다. – vandzi

+0

@vandzi : 아니요. onCompletion 핸들러에서 플래그로 해결 방법을 사용합니다. 또한 시간을 확인할 수 있으므로 시작 (또는 재설정) 후 핸들러가 500msec로 호출되면 코드를 건너 뜁니다. – marlar

답변

1

제공된 코드에서 이와 같은 동작이 나타나는 유일한 이유는 int seek = mDuration * position/1000; 라인에서 잘못된 검색 값입니다. 체크 아웃하려면 값을 기록하십시오.

1

onPrepared 콜백에 mp.seekTo 코드를 삽입해야합니다. onPrepared 콜백 이전에 검색 값이 적용되면 seek 값이 MediaPlayer에 의해 재설정됩니다. 마지막으로, 미디어는 탐색 할 위치를 알기 전에 정확하게 버퍼링해야합니다. onPrepared 콜백은 이것을 보장합니다.

희망 하시겠습니까?

관련 문제