Android:MediaPlayer音频结束后更改按钮文本 [英] Android: Change button text after MediaPlayer audio ends

查看:121
本文介绍了Android:MediaPlayer音频结束后更改按钮文本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

So I'm following Big Nerd Ranch's Android Programming book and I have an audio file playing through MediaPLayer. I also have a button that both plays and pauses the audio. If you press the play button to play the audio the text on the button changes to "pause". The problems is after the audio ends the button still says "pause" so the user has to press the button twice to play the audio again. How would I get the button to change its text to "play right after the audio ends"

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

Here's my code minus the layout xml for the buttons

片段类:

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类:

MediaPlayer class:

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


推荐答案

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

If you use the MediaPlayer class directly on the activity, then you can use its OnCompletionListener to detect if the media stops playing. inside this OnCompletionListener you can switch your button's text from "Pause" to "Play" like so:

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

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

I integrated your AudioPlayer to the fragment so that it would look like:

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

这篇关于Android:MediaPlayer音频结束后更改按钮文本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆