我正在尝试使用相同的媒体播放器,但更改了数据源。这里是我想要做的事: 使用现有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的错误?
是的,你说得对,我并没有包括这部分从我的代码,所以我的样品是有缺陷的。我会相应更新 - 不幸的是,这不是我的代码无法正常工作的原因。我已用调试器验证过,即使原始文件继续播放,媒体文件中也有不同的文件名。在我的情况下,文件被包含在资产文件夹中,所以我可以访问,如我的代码所示。 –