我在某些設備上播放音樂時遇到奇怪的行爲。當音頻第一次開始播放時,位置跳轉並播放,直到緩衝完全結束。我開始於sample code from Tutorials Point。 我在OnCreate()
創建的MediaPlayer這樣:Android MediaPlayer - 位置在緩衝時跳過
// Create Media Player
mediaPlayer = new MediaPlayer();
mediaPlayer.setOnBufferingUpdateListener(this);
mediaPlayer.reset();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
prepareMediaPlayer();
prepareMediaPlayer
設置這樣的數據:
private void prepareMediaPlayer() {
try {
mediaPlayer.setDataSource(myurl);
mediaPlayer.prepareAsync();
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
Toast.makeText(getApplicationContext(),
"Playing sound",Toast.LENGTH_SHORT).show();
mediaPlayer.start();
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
和onBufferingUpdate
打印出緩衝進度:
@Override
public void onBufferingUpdate(MediaPlayer mediaPlayer, int bufferingProgress) {
Log.v(TAG, "onBufferingUpdate() "+bufferingProgress +
"\ncurrentposition: "+mediaPlayer.getCurrentPosition());
seekbar.setSecondaryProgress(bufferingProgress);
}
和日誌輸出我收到了演示,當媒體播放器仍在緩衝時,位置如何跳躍。我已經在幾個設備上測試過了,這隻發生在Moto G.這是固件中的錯誤還是我做錯了什麼?
08-29 12:50:17.934 277/com.test.mediaplayer V/audio-player: onBufferingUpdate() 4
currentposition: 0
08-29 12:50:17.934 277/com.test.mediaplayer D/MediaPlayer: setSubtitleAnchor in MediaPlayer
08-29 12:50:17.976 277/com.test.mediaplayer V/audio-player: onBufferingUpdate() 4
currentposition: 0
08-29 12:50:18.014 27927-27945/com.test.mediaplayer V/RenderScript: 0xb7912ee8 Launching thread(s), CPUs 4
08-29 12:50:21.414 277/com.test.mediaplayer V/audio-player: onBufferingUpdate() 8
currentposition: 7
08-29 12:50:34.930 277/com.test.mediaplayer V/audio-player: onBufferingUpdate() 11
currentposition: 9
08-29 12:50:50.085 277/com.test.mediaplayer V/audio-player: onBufferingUpdate() 15
currentposition: 4
08-29 12:51:32.991 277/com.test.mediaplayer V/audio-player: onBufferingUpdate() 19
currentposition: 2
08-29 12:53:25.036 277/com.test.mediaplayer V/audio-player: onBufferingUpdate() 22
currentposition: 5
08-29 12:53:51.976 277/com.test.mediaplayer V/audio-player: onBufferingUpdate() 26
currentposition: 1
08-29 12:56:26.004 27927-27946/com.test.mediaplayer I/MediaHTTPConnection: proxyName: 0.0.0.0 0
08-29 12:56:34.651 277/com.test.mediaplayer V/audio-player: onBufferingUpdate() 30
currentposition: 10
08-29 12:56:35.862 277/com.test.mediaplayer V/audio-player: onBufferingUpdate() 33
currentposition: 1102
08-29 12:56:38.211 277/com.test.mediaplayer V/audio-player: onBufferingUpdate() 37
currentposition: 4
08-29 12:56:40.097 277/com.test.mediaplayer V/audio-player: onBufferingUpdate() 41
currentposition: 9
08-29 12:56:43.034 277/com.test.mediaplayer V/audio-player: onBufferingUpdate() 44
currentposition: 9
08-29 12:56:45.130 277/com.test.mediaplayer V/audio-player: onBufferingUpdate() 48
currentposition: 3
08-29 12:56:49.841 277/com.test.mediaplayer V/audio-player: onBufferingUpdate() 52
currentposition: 8
08-29 12:56:52.500 277/com.test.mediaplayer V/audio-player: onBufferingUpdate() 55
currentposition: 8
08-29 12:56:55.748 277/com.test.mediaplayer V/audio-player: onBufferingUpdate() 63
currentposition: 7
08-29 12:56:57.080 277/com.test.mediaplayer V/audio-player: onBufferingUpdate() 74
currentposition: 1223
08-29 12:56:59.072 277/com.test.mediaplayer V/audio-player: onBufferingUpdate() 81
currentposition: 979
08-29 12:57:00.073 277/com.test.mediaplayer V/audio-player: onBufferingUpdate() 81
currentposition: 1979
08-29 12:57:03.596 277/com.test.mediaplayer V/audio-player: onBufferingUpdate() 88
currentposition: 5
08-29 12:57:05.862 277/com.test.mediaplayer V/audio-player: onBufferingUpdate() 92
currentposition: 4
08-29 12:57:08.291 277/com.test.mediaplayer V/audio-player: onBufferingUpdate() 95
currentposition: 8
08-29 12:57:13.903 277/com.test.mediaplayer V/audio-player: onBufferingUpdate() 99
currentposition: 9
08-29 12:57:14.904 277/com.test.mediaplayer V/audio-player: onBufferingUpdate() 100
currentposition: 668
08-29 12:57:34.261 277/com.test.mediaplayer V/audio-player: onBufferingUpdate() 100
currentposition: 224068
爲什麼在同一個mediaPlayer實例上調用兩次setOnPreparedListener?第一次在onCreate()方法中,像'mediaPlayer.setOnPreparedListener(this)',然後在prepareMediaPlayer()方法中創建並設置一個新的'mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener()'。 –
@StasysSkliutas You '對,第一個'setOnPreparedListener'是一個錯誤,我把它刪除了,但結果沒有改變 – Evelyn
一些額外的信息會有幫助,哪些android版本的代碼運行成功,在哪個版本的android代碼失敗?什麼是源代碼流,我從代碼中假設它是一個遠程資源?這種行爲是否發生在任何文件上,例如song1.mp3,song2.mp3,...或者只是針對一個特定文件? –