安卓媒体播放器播放/暂停按钮

27

在我的项目中,我正在使用以下代码通过Android媒体播放器播放音乐文件

MediaPlayer mPlayer = MediaPlayer.create(MyActivity.this, R.raw.myfile);
mPlayer.start();

以上代码编写在播放按钮的onclick事件中。我希望通过再次单击同一按钮来暂停播放,即使用单个按钮进行播放/暂停。如何实现呢?

9个回答

64

你可以使用简单的if语句来处理暂停。尝试这样做:

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

11

请尝试这个:

final Button bPlay = (Button) findViewById(R.id.bPlay);
MediaPlayer song1 = MediaPlayer.create(tutorialFour.this, R.raw.fluet);
Button bStop = (Button) findViewById(R.id.bStop);
bPlay.setWidth(10);

song1.setOnCompletionListener(new OnCompletionListener() {

        public void onCompletion(MediaPlayer mp) {

            bPlay.setText("Play");


        }
    });

bPlay.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            // TODO Auto-generated method stub
            b = true;

            if (bPlay.getText().equals("Play") && b == true) {

                song1.start();

                bPlay.setText("Pause");
                b = false;
            } else if (bPlay.getText().equals("Pause")) {
                x = song1.getCurrentPosition();
                song1.pause();
                bPlay.setText("Resume");
                Log.v("log", "" + x);
                b = false;
            } else if (bPlay.getText().equals("Resume") && b == true) {
                song1.seekTo(x);
                song1.start();
                bPlay.setText("Pause");
                b = false;
            }


        }

    });

6

在按钮点击事件中,检查mediaPlayer.isPlaying()。如果媒体播放器正在播放,则返回true,否则返回false。

现在,你可以使用这个标志值来编写if语句,并切换播放或暂停,就像这样:

button.setOnClickListener(new View.OnClickListener() {

        public void onClick(View view) {

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

3
下面的代码处理了播放/暂停按钮的单击事件,以及用于向前和向后查找的向前和向后按钮(与媒体轨道同步的 seekbar)。目前它只播放一首歌曲。不过你可以添加更多。这是我使用 mediaplayer class 制作的第一个媒体播放器,所以你可能觉得它有点原始。但是如果需要,你也可以查看 VideoView 示例。使用 VideoView 显然更容易,因为标准媒体控制台已经以预定义的小部件形式存在。这使得设计播放器更加容易。
package in.org.Test;

import android.app.Activity;
import android.media.MediaPlayer;

import android.os.Bundle;

import android.view.View;
import android.view.View.OnClickListener;

import android.widget.ImageButton;

import android.widget.ProgressBar;
import android.widget.SeekBar;

import android.widget.Toast;

public class Test12Activity extends Activity implements OnClickListener,Runnable {

    private static final String isPlaying = "Media is Playing"; 
    private static final String notPlaying = "Media has stopped Playing"; 

    private SeekBar seek;

    MediaPlayer player = new MediaPlayer();
     private ImageButton plus,minus;

    ImageButton im;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        plus = (ImageButton) findViewById(R.id.imageButton2);
        minus = (ImageButton) findViewById(R.id.imageButton3);


        player = MediaPlayer.create(this, R.raw.sound2);


        player.setLooping(false); 
        im = (ImageButton) this.findViewById(R.id.imageButton1);


        seek = (SeekBar) findViewById(R.id.seekBar1);
        seek.setVisibility(ProgressBar.VISIBLE);
        seek.setProgress(0);
        seek.setMax(player.getDuration());
        new Thread(this).start();


        im.setOnClickListener(this);
        player.start(); 

        Toast.makeText(this, isPlaying, Toast.LENGTH_LONG).show();


        plus.setOnClickListener(new OnClickListener()   {
            @Override
            public void onClick(View v) { int cu = player.getCurrentPosition();  player.seekTo(cu-5000); }});
        minus.setOnClickListener(new OnClickListener()  {
            @Override
            public void onClick(View v) {int cu = player.getCurrentPosition();  player.seekTo(cu+5000);}});


    }


    @Override
    public void onClick(View arg0) {
        if (arg0.getId() == R.id.imageButton1) {
        if(player.isPlaying())  {
        player.pause();

        Toast.makeText(this, notPlaying, Toast.LENGTH_LONG).show();
        ImageButton img1=(ImageButton) this.findViewById(R.id.imageButton1);

        img1.setImageResource(R.drawable.play);

         }
        else
        {
            player.start();
            Toast.makeText(this, isPlaying, Toast.LENGTH_LONG).show();

            ImageButton img1=(ImageButton) this.findViewById(R.id.imageButton1);
            img1.setImageResource(R.drawable.pause);
        }   
        }
      }

    @Override
    public void run() {
        int currentPosition= 0; String s;
        int total = player.getDuration();
        while (player!=null && currentPosition<total) {
            try {
                Thread.sleep(1000);
                currentPosition= player.getCurrentPosition();
            } catch (InterruptedException e) {
                return;
            } catch (Exception e) {
                return;
            }            

            seek.setProgress(currentPosition);


        }


    }
}

2

暂停 Mediaplayer

Mediaplayer.pause();
length = Mediaplayer.getCurrentPosition();

恢复播放器从最近停止的位置继续播放的方法是:

Mediaplayer.seekTo(length);
Mediaplayer.start();

天才回答! - Noor Hossain

2
 MediaPlayer mpE = MediaPlayer.create(GuitarTuner.this, R.raw.test2 );

    play.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            if (mpE.isPlaying()) {
                mpE.pause();
                play.setBackgroundResource(R.drawable.play);
            } else {

                mpE.start();
                play.setBackgroundResource(R.drawable.pause);
            }

        }
    });

1

公共类MainActivity扩展自AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

//这首歌曲之前已经保存在raw文件夹中,歌曲的名字是mylife(它是一个mp3文件) 最终的MediaPlayer对象mMediaPlayer = MediaPlayer.create(MainActivity.this, R.raw.mylife);

    //      Play song
    Button playButton = (Button) findViewById(R.id.play);
    playButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            mMediaPlayer.start(); // no need to call prepare(); create() does that for you
        }
    });
    //      Pause song
    Button pauseButton = (Button) findViewById(R.id.pause);
    pauseButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            mMediaPlayer.pause();
        }
    });

    //      Stop song - when you stop a song, you can't play it again. First you need to prepare it.

    Button stopButton = (Button) findViewById(R.id.stop);
    stopButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            mMediaPlayer.stop();
            mMediaPlayer.prepareAsync();
        }
    });

}

}


1
请不要仅仅抛出代码...至少稍微解释一下你的答案。并且参观一下[tour]。 - T-Heron

0
button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            String text = button.getText().toString();
            if (text.equals("play")){
                mediaPlayer.start();
                button.setText("pause");  //changing text
            }
            else if (text.equals("pause")){
                mediaPlayer.pause();
                button.setText("play");  //changing text
            }
        }
    });

0
非常简单的解决方案。如果媒体播放器正在播放,则显示播放按钮并暂停媒体播放器。如果没有播放,则相反。
         playBtn.setOnClickListener(view -> {
            //events on play buttons
            if(mediaPlayer.isPlaying()){
                mediaPlayer.pause();
                playBtn.setImageResource(R.drawable.play);
            } else {
                mediaPlayer.pause();
                playBtn.setImageResource(R.drawable.pause);
            }
        });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接