多媒体播放器声音崩溃android



我有多个声音,我想加载

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);

等等。

我在点击监听器中有声音启动

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

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

如果可能的话,是否可以使用设置标签/获取标签进行切换?

请帮忙!

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
        }
    }
}

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

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

我不明白你为什么要这样做,你能发布更多的代码吗?但如果你需要从你的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;
  }
}

最新更新