如何阻止媒体播放器相互叠加播放多个声音



如何停止媒体播放器相互叠加播放?我希望应用程序中的媒体播放器只能播放 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();
            }
            }
    });
}

}

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

在开始播放其中一个媒体播放器之前,您需要停止/暂停所有其他媒体播放器。在启动其中任何一个之前,请检查其他四个中的任何一个是否正在运行。如果是,则停止/暂停它们,并在对所有播放的媒体播放器执行此操作,启动当前媒体播放器。

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

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

创建一个方法,如果任何其他玩家正在玩游戏,则会停止他们,并在开始在当前玩家中玩游戏之前调用它:

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

为每个听众做。您还可以添加检查以查看它们是否不为 null。

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

例如

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

然后,您可以再次启动媒体播放器为:

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

好吧,你显然可以使用

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

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


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

最新更新