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