gpt4 book ai didi

android - MediaPlayer 如何停止播放多个声音

转载 作者:行者123 更新时间:2023-11-29 14:54:20 26 4
gpt4 key购买 nike

我有一个播放声音的按钮。当我多次按下按钮时,它会多次播放声音。没关系,我想要这个。但是当我单击停止按钮时,它必须停止当前播放的所有声音。我用过:

   while (mediaPlayer.isPlaying()){mediaPlayer.stop();}

但它不起作用,声音继续播放。有人能帮我吗?这是我的完整代码:

public class HelloSoundboard extends Activity {
MediaPlayer mediaPlayer;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

Button item1 = (Button)findViewById(R.id.item1);
item1.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
mediaPlayer = MediaPlayer.create(getBaseContext(), R.raw.atyourservice);
mediaPlayer.start();
}
});

Button stop = (Button)findViewById(R.id.stop);
stop.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
while (mediaPlayer.isPlaying()){mediaPlayer.stop();}
// mediaPlayer.stop();
}
});
}
}

最佳答案

SoundPool 是一个更好的选择。我强烈反对实例化多个 MediaPlayer 实例,因为大多数系统没有资源来生成许多并行 Activity 实例。您会发现在许多设备上按下按钮 5 次以上会导致基于内存的崩溃。

就停止所有 Activity 流而言,没有为此内置的功能,但可以通过类似于现有代码的方式轻松完成。作为旁注,有一个 autoPause() 方法,它暂停所有流,但它并没有真正结束它们的播放(正如方法名称暗示的那样)。这是一个管理音频流的简单示例:

//SoundPool initialization somewhere
SoundPool pool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
//Load your sound effect into the pool
int soundId = pool.load(...); //There are several versions of this, pick which fits your sound

List<Integer> streams = new ArrayList<Integer>();
Button item1 = (Button)findViewById(R.id.item1);
item1.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
int streamId = pool.play(soundId, 1.0f, 1.0f, 1, 0, 1.0f);
streams.add(streamId);
}
});

Button stop = (Button)findViewById(R.id.stop);
stop.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
for (Integer stream : streams) {
pool.stop(stream);
}
streams.clear();
}
});

MediaPlayer 实例相比,管理 streamID 值列表的内存效率更高,您的用户会感谢您。另外请注意,即使 streamID 不再有效,调用 SoundPool.stop() 也是安全的,因此您无需检查现有播放。

HTH

关于android - MediaPlayer 如何停止播放多个声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10011515/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com