我正在嘗試使用相同的媒體播放器,但更改了數據源。這裏是我想要做的事: 使用現有MediaPlayer更改音頻播放的數據源?
private MediaPlayer mMediaPlayer;
public void pickFile1() {
initMediaPlayer("myfile1.mp3");
}
public void pickFile2() {
initMediaPlayer("myfile2.mp3");
}
private void initMediaPlayer(String mediafile) {
// Setup media player, but don't start until user clicks button!
try {
if (mMediaPlayer == null) {
mMediaPlayer = new MediaPlayer();
} else {
mMediaPlayer.reset(); // so can change data source etc.
}
mMediaPlayer.setOnErrorListener(this);
AssetFileDescriptor afd = getAssets().openFd(mediafile);
mMediaPlayer.setDataSource(afd.getFileDescriptor());
}
catch (IllegalStateException e) {
Log.d(TAG, "IllegalStateException: " + e.getMessage());
}
catch (IOException e) {
Log.d(TAG, "IOException: " + e.getMessage());
}
catch (IllegalArgumentException e) {
Log.d(TAG, "IllegalArgumentException: " + e.getMessage());
}
catch (SecurityException e) {
Log.d(TAG, "SecurityException: " + e.getMessage());
}
mMediaPlayer.setOnPreparedListener(this);
mMediaPlayer.prepareAsync(); // prepare async to not block main thread
mMediaPlayer.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK); // Keep playing when screen goes off!
}
我只是把這個當我想換一個新的媒體文件。它似乎並沒有成功改變數據源。第一個問題:是否可以這樣做,還是必須發佈媒體播放器併爲每個新文件創建一個新媒體播放器?如果可能的話,爲什麼我的代碼不能正常工作?
編輯:好吧,發佈和重新創建媒體播放器也沒有這樣做!它只是繼續播放同一首歌曲!?!?這怎麼可能呢?新想法 - 爲每首曲目創建一個不同的媒體播放器,這真的是我必須要做的嗎?也許這是Android的錯誤?
是的,你說得對,我並沒有包括這部分從我的代碼,所以我的樣品是有缺陷的。我會相應更新 - 不幸的是,這不是我的代碼無法正常工作的原因。我已用調試器驗證過,即使原始文件繼續播放,媒體文件中也有不同的文件名。在我的情況下,文件被包含在資產文件夾中,所以我可以訪問,如我的代碼所示。 –