如何阻止Media Player在彼此之上播放多个声音

时间:2014-01-08 12:07:07

标签: android audio media-player

如何阻止MediaPlayer在彼此之上播放?我希望应用程序中的媒体播放器只播放1个声音。 现在,当我播放1个声音,然后播放另一个声音时,它们同时播放。我希望当我播放第二个声音时,第一个停止,所以它们不会在彼此之上播放。 我的代码:

 mp=MediaPlayer.create(this, R.raw.barets);
    ImageButton dugme1 = (ImageButton) findViewById(R.id.dugme1);
    dugme1.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            if (mp.isPlaying()){
                mp.pause();
                mp.seekTo(0);
            }
            else{
                mp.start();
            }
            }

    });

    mp2=MediaPlayer.create(this, R.raw.dragunov);
    ImageButton dugme2 = (ImageButton) findViewById(R.id.dugme2);
    dugme2.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            if (mp2.isPlaying()){
                mp2.pause();
                mp2.seekTo(0);
            }
            else{
                mp2.start();
            }
            }

    });

    mp3=MediaPlayer.create(this, R.raw.g3s);
    ImageButton dugme3= (ImageButton) findViewById(R.id.dugme3);
    dugme3.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            if (mp3.isPlaying()){
                mp3.pause();
                mp3.seekTo(0);
            }
            else{
                mp3.start();
            }
            }

    });
    mp4=MediaPlayer.create(this, R.raw.psg1);
    ImageButton dugme4= (ImageButton) findViewById(R.id.dugme4);
    dugme4.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            if (mp4.isPlaying()){
                mp4.pause();
                mp4.seekTo(0);
            }
            else{
                mp4.start();
            }
            }

    });

    mp5=MediaPlayer.create(this, R.raw.scout);
    ImageButton dugme5= (ImageButton) findViewById(R.id.dugme5);
    dugme5.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            if (mp5.isPlaying()){
                mp5.pause();
                mp5.seekTo(0);
            }
            else{
                mp5.start();
            }
            }

    });
}

}

6 个答案:

答案 0 :(得分:5)

您只是在检查您的当前媒体播放器是否正在播放,也就是说,在mp中,您只是在检查mp,等等。

您必须在开始播放其中一个之前停止/暂停所有其他MediaPlayers 。在启动其中任何一个之前,检查其他四个是否正在运行。如果是,则停止/暂停以及 为所有播放媒体播放器执行此操作后,启动当前的媒体播放器。

答案 1 :(得分:1)

每次开始播放新歌时,先暂停,然后再播放新歌。当您需要在活动关闭时停止播放歌曲时要小心,即使这样您也需要关闭所有音频播放。

答案 2 :(得分:1)

对我来说这似乎很明显......即使你的六名球员中的一名也不知道其他五名球员。当你点击任何按钮时,其他五个如何停止?在点击事件处理程序中,检查玩家列表并查看是否有任何播放并暂停。简单,不是吗? :)但首先你需要一个每个玩家必须访问的玩家列表。

答案 3 :(得分:1)

创建一种方法,可以在任何其他玩家正在播放时停止并在开始在当前播放器中播放之前调用它:

private void stopPlayers() {
    if (mp.isPlaying) mp.stop();
    if (mp2.isPlaying) mp2.stop();
    if (mp3.isPlaying) mp3.stop();
    if (mp4.isPlaying) mp4.stop();
    if (mp5.isPlaying) mp5.stop();
}

在调用start()之前在每个侦听器中调用它,例如:

else {
    stopPlayers();
    mp.start();
}

//...

else {
    stopPlayers();
    mp2.start();
}    

//etc

为每个听众做这件事。您还可以添加检查以查看它们是否为空。

答案 4 :(得分:1)

每次启动媒体播放器播放新声音时,请停止媒体播放器,然后将其释放,然后再实例化新实例以播放新声音。

例如,

if(mp.isPlaying()){ 
     mp.stop();
     mp.release();
}

然后您可以再次将媒体播放器初始化为:

mp=MediaPlayer.create(this, R.raw.dragunov);
mp.start();

答案 5 :(得分:0)

嗯,你显然可以使用

if(mp.isPlaying()){ 
 mp.stop();
 mp.release();
 }

如果您不必担心多次重复使用同一活动。


但是,如果您需要重复使用相同的MediaPlayer对象,请尝试将其声明为private static MediaPlayer mp,这应该将MediaPlayer mp播放的声音数量限制为1。