OnCompletion listener with two MediaPlayer
如何对同时播放的两个媒体播放器使用OnCompletionListener?
该应用程序允许用户同时播放两种媒体:已录制的曲目和音乐曲目,如果其中一个停止,则另一个也应该停止。
我找到了有关如何在单个MediaPlayer的完成侦听器上应用的解决方案。
我的第一种方法是为每种媒体声明两个侦听器:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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(); } } |
这是一个好习惯吗?还有其他解决方案吗?
无论如何,您都不需要检查哪个球员已经停止比赛,因为您希望在任何一个球员完成比赛后都停止比赛。
因此,只需将通用侦听器添加到两个播放器即可。
1 2 | mp0.setOnCompletionListener(cplmp); mp1.setOnCompletionListener(cplmp); |
并停止两个玩家
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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(); } } }; |
为了获得更好的可读性,您可以为班级实现侦听器,并将两个玩家的侦听器都设置为您的班级。然后,在您覆盖的onCompletition方法中,可以为两个播放器创建一个if控件,
1 2 3 4 5 6 7 8 | if(m == mp0) { .. .. } else if(m == mp1){ .. .. } |