多媒体播放器声音崩溃android

时间:2013-11-27 16:12:32

标签: java android crash android-mediaplayer audio

我想加载多个声音

final MediaPlayer mp = MediaPlayer.create(this, R.raw.testsnd);
final MediaPlayer mp = MediaPlayer.create(this, R.raw.testsnd2);
final MediaPlayer mp = MediaPlayer.create(this, R.raw.testsnd3);

等。

我在clicklisteners中有声音启动

button1.setOnClickListener(new View.OnClickListener() { 
            public void onClick(View v) { 
mp.start(); 

}};

必须是最终的mp.start();将不会在听众中看到 有没有办法在不同的声音之间切换,因为媒体播放器会使应用程序崩溃 如果我不止一次使用

如果可能,可以设置tag / get标签来进行切换吗?

请帮忙!

2 个答案:

答案 0 :(得分:1)

MediaPlayer有一台我相信你忽略的状态机。静态创建方法是一次性交易的快捷方式。如果您希望多次使用MediaPlayer,请执行以下操作:

final MediaPlayer mp1 = new MediaPlayer();

button1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick() {
        try {
            mp1.reset();
            mp1.setDataSource(YourClass.this,
                Uri.parse("android.resource://com.your.package/" + R.raw.testsnd);
            mp1.prepare();
            mp1.start();
        }
        catch (Exception ex) {
            // handle error
        }
    }
}

替换您的包和类名称,以及推断多个MediaPlayers的想法应该是微不足道的。除非可以同时播放声音,否则您在任何给定时间只需要一个。另外,完成后不要忘记调用release()。

如果声音很简短,您可能还需要考虑使用SoundPool

答案 1 :(得分:0)

我不明白为什么你这样做,你能发布更多的代码吗?但是如果您需要从MediaPlayer实例播放三种声音,可以试试这个:

private final MediaPlayer mpSound1;
private final MediaPlayer mpSound2;
private final MediaPlayer mpSound3;

private void playSound1(){
  try{
     if(mpSound1==null)
        mpSound1 = MediaPlayer.create(this, R.raw.testsnd);
     mpSound1.start();
  }catch(Exception ex){
     mpSound1 = null;
  }
}

private void playSound2(){
  try{
     if(mpSound2==null)
        mpSound2 = MediaPlayer.create(this, R.raw.testsnd2);
     mpSound2.start();
  }catch(Exception ex){
     mpSound2 = null;
  }
}

private void playSound3(){
  try{
     if(mpSound3==null)
        mpSound3 = MediaPlayer.create(this, R.raw.testsnd3);
     mpSound3.start();
  }catch(Exception ex){
     mpSound3 = null;
  }
}