java在再次播放之前停止MediaPlayer不起作用
我有一个包含一些项目的列表视图,每个项目都会播放特定的声音。以下是代码:
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
try {
player.setDataSource(externalStoragePath + "/Android/data/com.whizzappseasyvoicenotepad/" + recordedFilesArray.get(arg2) + ".mp3");
player.prepare();
player.start();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
如果我单击一个项目,它开始播放,然后在我之前单击的项目结束播放之前单击另一个项目,MediaPlayer将同时播放两种声音。如果我在MediaPlayer停止播放之前单击了该项目,如何让它停止播放前一个声音并开始播放新的声音
我试着添加播放器。在尝试之前停止(),这样每次我单击一个项目时,MediaPlayer都会在设置新源并重新开始之前停止,但这只会停止上一个声音,而不会播放新的声音
我还尝试添加IF语句,如下所示:
if (!player.isPlaying()){
//normally start the player
}
else if (player.isPlaying()){
//stop it before starting it again
}
我会复制我的实际代码,但我已经删除了,因为它不起作用。它也只是停止了前一个声音,没有播放新的声音
# 1 楼答案
# 2 楼答案
停止歌曲后重置播放器
# 3 楼答案
必须在空闲状态下调用
setDataSource()
。所以你必须在调用setDateSource()
之前调用reset()
# 4 楼答案
要重用
MediaPlayer
,必须在设置新dataSource
之前调用reset()
。还有一件事,你不应该在UI线程中调用prepare()
,这可能会导致ANR
错误。您宁愿调用prepareAsync()
函数