2011-09-27 43 views
3

我花了很多時間試圖解決這個問題:MediaPlayer OnCompletion爲何第一次播放媒體?

當MediaPlayer第一次被加載並啓動時,它的OnCompletion被調用。這是一個問題,因爲我有一些代碼在上一個軌道完成時跳到下一個軌道。

我已經在OnCompletion監聽器中使用了一個標誌來解決它,但爲什麼會這樣呢?

這個片段是在我服務的play()方法:

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

出於某種原因,onCompletion從播放()返回即使它是後正在播放的第一首曲目方法後立即叫服務已創建。

+0

嗨,你發現這裏有什麼問題嗎?我有類似的問題。 OnComletion在mp.reset()之後調用 – vandzi

+0

@vandzi:不,不是。我在onCompletion處理程序中使用了一個解決方法。您也可以檢查時間,以便如果在啓動(或重置)後500毫秒內調用處理程序,則代碼將被跳過。 – marlar

回答

1

在提供的代碼中,我看到這種行爲的唯一原因是來自行int seek = mDuration * position/1000;的錯誤查找值。記錄該值以檢查出來。

1

你應該嘗試將你的mp.seekTo代碼放在onPrepared回調中。如果搜索值在onPrepared回調之前生效,則搜索值將被MediaPlayer重置。最後,媒體需要在知道要尋求什麼位置之前正確地進行緩衝。 onPrepared回調確保了這一點。

希望有幫助!