1

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

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

上面有暂停的那个可以,但是如果我想停止音乐,它就不起作用。以下不工作:

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

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

4

9 回答 9

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)

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

于 2013-09-07T23:33:17.233 回答
2

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

public void onClick(View v) 
{
    if(musicPlaying == false)
    {
        mp2.start();
        musicPlaying = true;
    }
    else
    {
        mp2.stop();
        musicPlaying = false;
    }
}
于 2013-09-07T23:30:46.190 回答
1
if(mp2.isPlaying()) {
   mp2.pause();
} else {
   mp2.start();
}
于 2013-09-07T23:31:03.140 回答
1

这是我用来启动和停止音乐的,你必须准备好MediaPlayer才能播放。注意:这将从停止的地方开始播放音乐。

媒体播放器准备()方法

如果您正在播放音乐,您应该使用 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();
            }
        }   
    });
于 2014-04-26T13:32:46.507 回答
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();
                 }
            }
        });
于 2020-12-13T14:01:57.233 回答
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();
        }
    });

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

于 2014-06-03T01:58:21.197 回答
0

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

就像是:

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

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

于 2014-01-04T18:34:49.237 回答
0

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

 public void onClick(View v) {
       if(mp.isPlaying()){
          mp.seekTo(0);
          mp.pause();
        }
        else{
            mp.seekTo(0);
        }
    }    ;
于 2015-05-06T15:21:57.933 回答
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() 函数中添加此代码。

于 2016-05-10T18:38:17.470 回答