【问题标题】:multiple mediaplayer sound crash android多个媒体播放器声音崩溃android
【发布时间】:2013-11-28 08:29:06
【问题描述】:

我想要加载多个声音

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();不会在听众中看到 有没有办法在不同的声音之间切换,因为媒体播放器会使应用程序崩溃 如果我不止一次使用这个

是否可以使用set tag/get tag进行切换?

请帮忙!

【问题讨论】:

    标签: java android crash android-mediaplayer audio


    【解决方案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
            }
        }
    }
    

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多