OnCompletion listener with two MediaPlayer



如何使用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){
..
..
}

最新更新