【问题标题】:Android: Change button text after MediaPlayer audio endsAndroid:MediaPlayer 音频结束后更改按钮文本
【发布时间】:2014-10-23 11:26:06
【问题描述】:

所以我正在关注 Big Nerd Ranch 的 Android 编程书,并且我有一个通过 MediaPLayer 播放的音频文件。我还有一个可以播放和暂停音频的按钮。如果您按下播放按钮播放音频,按钮上的文本将变为“暂停”。问题是音频结束后,按钮仍然显示“暂停”,因此用户必须按两次按钮才能再次播放音频。如何让按钮将其文本更改为“音频结束后立即播放”

这是我的代码减去按钮的布局 xml

片段类:

public class HelloMoonFragment extends Fragment {

    private Button mPlayButton;
    private Button mStopButton;

    private AudioPlayer mPlayer = new AudioPlayer();

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_hello_moon, parent, false);

        mPlayButton = (Button)v.findViewById(R.id.hellomoon_playButton);
        mPlayButton.setText("Play");
        mPlayButton.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v) {
                if(mPlayButton.getText().equals("Play")) {
                    mPlayButton.setText("Pause");
                    mPlayer.play(getActivity());
                }
                else if(mPlayButton.getText().equals("Pause")){
                    mPlayButton.setText("Play");
                    mPlayer.pause();
                }
            }
        });

        mStopButton = (Button)v.findViewById(R.id.hellomoon_stopButton);
        mStopButton.setOnClickListener(new View.OnClickListener() {
           public void onClick(View v) {
               mPlayer.stop();
               mPlayButton.setText("Play");
           }
        });

        return v;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        mPlayer.stop();
    }
}

MediaPlayer 类:

package com.bignerdranch.android.hellomoon;

import android.content.Context;
import android.media.MediaPlayer;

public class AudioPlayer {

    private MediaPlayer mPlayer;
    private boolean mCompleted =  false;

    public void stop() {
        if (mPlayer != null) {
            mPlayer.release();
            mPlayer = null;
        }
    }

    public void play(Context c) {

        if(mPlayer == null) {
            mPlayer = MediaPlayer.create(c, R.raw.one_small_step);

            mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                public void onCompletion(MediaPlayer mp) {
                    stop();
                    mCompleted = true;
                }
            });
        }
            mPlayer.start();
    }

    public void pause() {
        if(mPlayer != null) mPlayer.pause();
    }
}

【问题讨论】:

  • 老实说,我认为AudioPlayer 类不是必需的,而且似乎是多余的。但是,如果您认为需要它(即您将向该类添加其他方法/功能以使其比MediaPlayer 更具体),请在您的问题中解释原因,我将编辑我的答案。

标签: java android


【解决方案1】:

如果您直接在活动上使用MediaPlayer 类,那么您可以使用它的OnCompletionListener 来检测媒体是否停止播放。在这个OnCompletionListener 中,您可以将按钮的文本从“暂停”切换为“播放”,如下所示:

mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
    public void onCompletion(MediaPlayer mp) {
        mPlayButton.setText("Play");
    }
});

我将您的 AudioPlayer 集成到片段中,使其看起来像:

public class HelloMoonFragment extends Fragment {

    private Button mPlayButton;
    private Button mStopButton;

    private MediaPlayer mPlayer;
    private boolean mCompleted =  false;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_hello_moon, parent, false);

        mPlayButton = (Button) v.findViewById(R.id.hellomoon_playButton);
        mPlayButton.setText("Play");

        mPlayButton.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v) {

                if(mPlayer == null) {
                    mPlayer = MediaPlayer.create(c, R.raw.one_small_step);
                    mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                        public void onCompletion(MediaPlayer mp) {
                            stopMediaPlayer();
                            mPlayButton.setText("Play");
                        }
                    });
                }

                if(mPlayButton.getText().equals("Play")) {
                    mPlayButton.setText("Pause");
                    mPlayer.start();
                }
                else if(mPlayButton.getText().equals("Pause")){
                    mPlayButton.setText("Play");
                    mPlayer.pause();
                }
            }
        });

        mStopButton = (Button)v.findViewById(R.id.hellomoon_stopButton);
        mStopButton.setOnClickListener(new View.OnClickListener() {
           public void onClick(View v) {
                stopMediaPlayer();
                mPlayButton.setText("Play");
           }
        });

        return v;
    }

    @Override
    public void onDestroy() {
        stopMediaPlayer();
        super.onDestroy();
    }


    public void stopMediaPlayer() {
        if (mPlayer != null) {
            mPlayer.release();
            mPlayer = null;
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-29
    • 1970-01-01
    • 2015-11-10
    • 1970-01-01
    • 2016-02-29
    相关资源
    最近更新 更多