如何使用OnCompletionListener为两个媒体播放器在同一时间播放?
该应用程序允许用户同时播放两种媒体:录制轨道和音乐轨道,如果其中一个停止,另一个也应该停止。我找到了关于如何应用于单个MediaPlayer的完成侦听器的解决方案。
我的第一种方法是为每个媒体声明两个侦听器:
mp0.setOnCompletionListener(cplmp0);
mp1.setOnCompletionListener(cplmp1);
private MediaPlayer.OnCompletionListener cplmp0 = new MediaPlayer.OnCompletionListener() {
public void onCompletion(MediaPlayer m) {
mButtonListenOriginal.setImageResource(R.drawable.player_button_listen);
mp1.stop();
mp1.reset();
}
}
private MediaPlayer.OnCompletionListener cplmp1 = new MediaPlayer.OnCompletionListener() {
public void onCompletion(MediaPlayer m) {
mp0.stop();
mp0.reset();
}
}
这是一个好的做法吗?还有其他的解决方案吗?
无论如何,你不需要检查哪个玩家已经停止,因为你想让两个玩家在任何一个玩家完成游戏后停止。因此,只需在两个播放器中添加共同的侦听器。
mp0.setOnCompletionListener(cplmp);
mp1.setOnCompletionListener(cplmp);
和停止两个播放器
private MediaPlayer.OnCompletionListener cplmp = new MediaPlayer.OnCompletionListener() {
public void onCompletion(MediaPlayer m) {
if (mp0 != null) {
mp0.stop();
mp0.reset();
}
if (mp1 != null) {
mp1.stop();
mp1.reset();
}
}
};
为了更好的可读性,您可以将侦听器实现到您的类中,并将两个播放器的侦听器设置为您的类。然后在你的重写oncompletion方法中,你可以为你的两个播放器创建一个if控件
if(m == mp0) {
..
..
}
else if(m == mp1){
..
..
}