2012-10-02 100 views
0

有時我得到IllegalStateException異常由MediaPlayer.SeekTo(INT)拋出 在MediaPlayer運行在服務和呼叫SeekTo(INT)是這樣的:MediaPlayer.SeekTo(INT)拋出IllegalStateException異常

public void seekTo(int value) 
{ 
if (mp != null && !(value <= -1)) { 
mp.seekTo(value); 
} 
} 
+0

首先,你爲什麼要用'!(value <= -1)'?這與'(value> = 0)'基本相同' - 對不起,這似乎是一種非常奇怪的做事方式。其次,你是否檢查過'MediaPlayer'和'seekTo(...)'方法的文檔?如果處於空閒狀態,初始化狀態,停止狀態或錯誤狀態,它將引發異常。 http://developer.android.com/reference/android/media/MediaPlayer.html#Valid_and_Invalid_States – Squonk

回答

1

IllegalStateException以防止編程錯誤,例如調用prepare()prepareAsync()或其中一個過載的setDataSource方法處於無效狀態。

如果prepare()prepareAsync()在任何其他狀態下被調用,則會拋出IllegalStateException

儘管異步調用seekTo(int)返回正確方式,但實際的搜索操作可能需要一段時間才能完成,特別是對於正在流式傳輸的音頻/視頻。當實際查找操作完成時,如果OnSeekCompleteListener已通過setOnSeekCompleteListener(OnSeekCompleteListener)預先註冊,則內部播放器引擎會呼叫用戶提供的OnSeekComplete.onSeekComplete()。 請注意,seekTo(int)也可以在其他狀態下調用,例如Prepared,PausedPlaybackCompleted狀態。

這個數據全部覆蓋在這裏:http://developer.android.com/reference/android/media/MediaPlayer.html 其實我直接引用它。

您應該能夠處理使用OnErrorListener()遇到的任何錯誤。

你可以找到更多關於OnErrorListener()這裏:

http://developer.android.com/reference/android/media/MediaPlayer.OnErrorListener.html

在錯誤監聽你會​​:

  1. 收到錯誤。
  2. 確定錯誤的類型。
  3. 處理錯誤以糾正情況而不會崩潰。