单击Android按钮播放音乐,再次单击停止声音

时间:2013-09-07 23:22:54

标签: android click playback

我有一个按钮,当我点击它播放音乐时,怎么做,当我第二次点击时,停止播放音乐?

 Button two = (Button)this.findViewById(R.id.button2);
            final MediaPlayer mp2 = MediaPlayer.create(this, R.raw.two);
            two.setOnClickListener(new OnClickListener(){

                public void onClick(View v) {
                    mp2.start();
                }
            });  

好的,这个有效:

Button one = (Button)this.findViewById(R.id.button1);
    final MediaPlayer mp1 = MediaPlayer.create(this, R.raw.n);
    one.setOnClickListener(new OnClickListener(){

        @Override
            public void onClick(View v) {
            if (mp1.isPlaying()) {
                mp2.pause();
                } 
                else {
                mp2.start();
            }
        ;
    }});

上面有Pause的人可以使用,但是如果我想停止音乐,它就不起作用了。 以下不工作:

@Override
        public void onClick(View v) {
        if (mp1.isPlaying()) {
            mp2.stop();
            } 
            else {
            mp2.start();
        }
    ;
}});

我收到错误:在状态0开始调用 错误(-38,0)

9 个答案:

答案 0 :(得分:3)

根据http://developer.android.com/reference/android/media/MediaPlayer.html,我想你可以这样做:

 Button two = (Button)this.findViewById(R.id.button2);
            final MediaPlayer mp2 = MediaPlayer.create(this, R.raw.two);
            two.setOnClickListener(new OnClickListener(){

                public void onClick(View v) {

                    // If the music is playing
                    if(mp2.isPlaying() == true)
                        // Pause the music player
                        mp2.pause();
                    // If it's not playing
                    else
                        // Resume the music player
                        mp2.start();
                }
            });

你实际上可以只写

 if(mp2.isPlaying())

而不是

 if(mp2.isPlaying() == true)

这只是为了理解正在发生的事情。

答案 1 :(得分:2)

您可以进行布尔检查以查看它是否已启动(并将布尔值设置为false),如果是,则停止音乐,如果不启动它(并将布尔值设置为true)。类似的东西:

public void onClick(View v) 
{
    if(musicPlaying == false)
    {
        mp2.start();
        musicPlaying = true;
    }
    else
    {
        mp2.stop();
        musicPlaying = false;
    }
}

答案 2 :(得分:1)

if(mp2.isPlaying()) {
   mp2.pause();
} else {
   mp2.start();
}

答案 3 :(得分:1)

这是我用来启动和停止音乐的内容,您必须准备MediaPlayer进行播放。注意:这将从停止的地方开始播放音乐。

Mediaplayer prepare() method

如果您正在播放音乐,则应使用prepareAsync()

musicButton = (Button) findViewById(R.id.btn_dj_player);
    musicButton.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            if (mp.isPlaying()) {//check if a song is already playing
                mp.stop();
                try {
                    mp.prepare();//get the mediaplayer reeady for playback
                } catch (IllegalStateException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }else {
                mp.start();
            }
        }   
    });

答案 4 :(得分:1)

如果只有一种声音,并且只想按一个按钮启动或停止,则可能会有所帮助。

 Button button_name = (Button)this.findViewById(R.id.Your_button_id_Here);
 final MediaPlayer mp = MediaPlayer.create(this, R.raw.YOur_audio_File_name_here);
 button_name.setOnClickListener(new OnClickListener(){

            public void onClick(View v) {

                 if(mp.isPlaying())
                 {
                    mp.pause();
                 }
                 else 
                 {
                mp.start();
                 }
            }
        });

答案 5 :(得分:0)

您是否尝试过使用seekTo()功能?

类似的东西:

if (mp.isPlaying()) {
            mp.stop();
            mp.prepareAsync();
            mp.seekTo(0);
        } else {
            mp.start();
        }
    }

我只是在这里猜测,但可能值得研究。 : - )

答案 6 :(得分:0)

我完成了如下:

我声明了一个布尔变量:

boolean isButtonClicked = false;

然后我在这样的方法中设置了if else:

initPlaySound()
{
    if(isButtonClicked)
    {
       player.start();
    } else{
       player.stop();
}

最后,我在方法中设置了按钮的onClick:

button.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            isButtonClicked = !isButtonClicked;
            initPlaySound();
        }
    });

基本上,当首次单击该按钮时,布尔值设置为与其当前状态(false为true)相反,并且if执行中的代码。再次单击该按钮后,布尔值再次设置为相反(true为false),声音停止。

答案 7 :(得分:0)

我以手动方式解决了这个问题。如果正在播放声音,我将声音包裹在开头(seekTo(0)),然后暂停声音。如果声音已经暂停,则只调用seekTo(0)。

 public void onClick(View v) {
       if(mp.isPlaying()){
          mp.seekTo(0);
          mp.pause();
        }
        else{
            mp.seekTo(0);
        }
    }    ;

答案 8 :(得分:0)

添加全局变量boolean flag = false;

if(flag==false)
    {
        mp=MediaPlayer.create(this, R.raw.abc);
        mp.start();
        playbutton.setText("Pause");
        flag=true;
    }
    else if(mp.isPlaying()&&flag==true)
    {
        mp.pause();
        playbutton.setText("Play");
        flag=false;
    }

如果您想在应用中使用与PLAY / PAUSE相同的按钮,此代码将起作用。希望这可以帮助。在用于播放或暂停的onClick()函数按钮中添加此代码。