关于android:带有两个MediaPlayer的OnCompletion侦听器

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){
..
..
}