我有一个播放声音的按钮.
当我多次按下按钮时,它会多次播放声音.
这是oke,我想要这个.
但是,当我单击“停止”按钮时,它必须停止当前正在播放的所有声音.
我用了:
while (mediaPlayer.isPlaying()){mediaPlayer.stop();}
但它不起作用,声音不断播放.有人能帮我吗?
这是我的完整代码:
public class HelloSoundboard extends Activity {MediaPlayer mediaPlayer;@OverrIDepublic 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实例,因为大多数系统没有资源来生成许多并行活动实例.您会发现在许多设备上按5次以上按钮会导致基于内存的崩溃.
至于停止所有活动流,还没有内置功能,但是很容易以类似于现有代码的方式完成.附带说明一下,有一个autopause()方法,该方法暂停所有流,但是并没有真正结束它们的播放(因为方法名称暗示).这是管理音频流的简单示例:
//SoundPool initialization somewhereSoundPool pool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);//Load your sound effect into the poolint soundID = pool.load(...); //There are several versions of this, pick which fits your soundList<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如何停止播放多个声音全部内容,希望文章能够帮你解决android-MediaPlayer如何停止播放多个声音所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)