0

我有一个 MediaPlayer 对象,通过它我在单击按钮时播放声音。声音文件只有 1-2 秒长。当我一个接一个(快速)单击相应的按钮时,它不会播放两次声音(它只播放一次。我尝试了一些这样的代码:

public void onClick(View view) {
if(DrawSound.isPlaying()) {
          DrawSound.stop();
         DrawSound.prepareAsync();
        }
      DrawSound.start();
}

这不是工作。搜索很多,但可以使它工作。任何帮助!!!!

4

4 回答 4

0

尝试使用 prepare 而不是 prepareAsync

于 2012-04-13T09:29:00.743 回答
0

这是因为您没有在完成播放声音后释放媒体播放器......媒体播放器方法中的使用release和方法......resetsetOnCompletionListener

你可以像这样使用它......

    if(mp.isPlaying()) {
                    try {
                        mp.stop();
                        mp.reset();
                        mp.prepare();
                    } catch (IllegalStateException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    }
                mp.start();
}

或者你可以使用它...

            mp.stop();         
            mp.prepareAsync();  
            mp.setOnPreparedListener(new OnPreparedListener() {

                @Override
                public void onPrepared(MediaPlayer mp) {
                    mp.start(); 
                }
            });

这对我来说很好。

于 2012-04-13T09:31:55.450 回答
0

嘿伙计们,如果有人可以从中获得帮助:

用一个技巧解决我的问题(毕竟技巧可以解决所有问题:p)

我拿了 2 个 MediaPlayer 对象和一个 MediaPlayer 引用并这样写:

soundPlayer = DrawSound.isPlaying() ? DrawSound1 : DrawSound;
soundPlayer.start();
于 2012-04-13T12:13:35.110 回答
-1

试试这个,看看它是否有效:

if(DrawSound.isPlaying()) {         
            DrawSound.stop();         
            DrawSound.prepareAsync();  
            DrawSound.setOnPreparedListener(new OnPreparedListener() {

                @Override
                public void onPrepared(MediaPlayer mp) {
                    DrawSound.start(); 
                }
            });
            } 
于 2012-04-13T09:40:23.220 回答