Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在android中播放相同的声音,无需等待前一个声音结束_Android_Audio - Fatal编程技术网

在android中播放相同的声音,无需等待前一个声音结束

在android中播放相同的声音,无需等待前一个声音结束,android,audio,Android,Audio,伙计们的场景是,假设我点击一个按钮,声音播放,在这首歌的持续时间内,我再次点击按钮,想从头开始播放。我尝试了以下代码,但没有成功。 代码是: public class SoundtestActivity extends Activity { /** Called when the activity is first created. */ MediaPlayer mp; @Override public void onCreate(Bundle savedInstanceState) {

伙计们的场景是,假设我点击一个按钮,声音播放,在这首歌的持续时间内,我再次点击按钮,想从头开始播放。我尝试了以下代码,但没有成功。 代码是:

public class SoundtestActivity extends Activity {
/** Called when the activity is first created. */
 MediaPlayer mp;
 @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
     mp = MediaPlayer.create(this, R.raw.gun_shot);
    Button click=(Button) findViewById(R.id.bt1);
    click.setOnClickListener((new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(mp.isPlaying())
                mp.reset();
            mp.start();
        }
    }));
       }

}

您只需
注释
以下几行,并
在按钮的侦听器方法中移动您的媒体播放器实例
,就可以让多个媒体播放器并行播放

Button click=(Button) findViewById(R.id.bt1);
click.setOnClickListener((new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    mp = MediaPlayer.create(this, R.raw.gun_shot); // ADD THIS LINE HERE

        if(mp.isPlaying()){ 
            mp.stop();           //ADDED TO STOP FIRST
            mp.release();        //ADDED TO RELEASE RESOURCES
    }
        mp.start();
    }
}));
试试这个代码

mp.setOnCompletionListener(新的OnCompletionListener(){


或者用mp.reset()替换mp.start();在这段代码中,最好的方法和最简单的方法是= mp.setLooping(真);
是的,它确实有效,只需在mp.start()之后添加这一行,不需要其他任何提示。

在sir之前尝试过这一点,但在多次触碰之后,它停止播放:/u能否提供媒体播放器停止播放时生成的日志,请尝试使用媒体播放器。create();在onCreate()中调用一次,请提供日志这是日志:06-18 10:18:21.082:E/MediaPlayer(848):错误(-19,0)06-18 10:18:21.092:E/MediaPlayer(848):错误(-19,0)06-18 10:18:21.282:E/MediaPlayer(848):错误(-19,0)06-18 10:18:21.294:E/MediaPlayer(848):错误(-19,0)06-18 10:18:21.462:E/MediaPlayer(848):错误(-19,0)

06-18 10:18:21.462:E/MediaPlayer(848):错误(-19,0)06-18 10:18:38.636:D/dalvikvm(848):格雷夫增加到20106-18 10:18:38.662:E/MediaPlayer(848):错误(-19,0)06-18 10:18:38.672:E/MediaPlayer(848):错误(-19,0)06-18 10:18:38.872:E/MediaPlayer(848):错误(-19,0)媒体播放器实例有一些可允许的限制,这就是您出现错误的原因,而且文档中说,当使用媒体播放器时,您应该调用release(),以释放资源。如果不发布,过多的MediaPlayer实例将导致异常。请查看该片段的编辑版本,我意识到您只是想从一开始就再次播放相同的声音,而不是相同声音的多个实例。
            @Override
            public void onCompletion(MediaPlayer mp) {
                mp.release();
                mp.start();
            }

        });