当前位置: 首页 > 面试题库 >

Android:MediaPlayer音频结束后更改按钮文本

卓麒
2023-03-14
问题内容

因此,我正在阅读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();
    }
}

问题答案:

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


 类似资料:
  • 问题内容: 在HTML中,我通过此代码创建一个音频按钮 它可以正常工作,但是在reactjs中,我在下面使用三个文件,并且该文件与html具有相同的路径,但是代码无法正常工作,因此我得到了一个空白网站。对不起,我的英语不好。index.html Test.js index.js 问题答案: 在反应期望功能。但是,当您这样做时,它会返回一个值。将onClick定义更改为 码: 例如,您还需要一个捆绑

  • 问题内容: 当我单击按钮时,我希望值更改为从。 HTML: Javascript: 该按钮现在正在显示打开的窗帘,我希望将其更改为关闭窗帘,对吗? 问题答案: 如果我已正确理解您的问题,则希望在“打开窗帘”和“关闭窗帘”之间切换-如果关闭,则切换为“打开窗帘”,反之亦然。如果那是您需要的,那么它将起作用。 请注意,您不需要使用内部更改,因为它是在 上下文 中调用的-我所说的 上下文 是指您稍后会在

  • 问题内容: 我正在使用新的jquery mobile 1.0 alpha 1版本来构建移动应用程序,我需要能够切换按钮的文本。切换文本效果很好,但是一旦执行文本替换,css格式就会被破坏。 问题答案: 创建按钮时,它会添加一些其他元素,例如一些内部元素,如下所示: 要更改文本,您需要以下选择器:

  • 问题内容: [编辑]经过大量挖掘,我发现问题出在我如何将CKEditor集成到页面中。如公认的答案所述,在这种情况下,简单而明显的方法 确实 有效。 你好 在按下“提交”按钮之后,但在实际提交之前,我需要更改表单的值。 我尝试挂钩到表单的“ submit”事件,并在那里手动更改文本字段的值,但是看起来实际上并没有更改提交的值。 有任何想法吗? 问题答案: 我对您的说法感到奇怪,即处理程序对您不起作

  • 在我的应用程序中,我使用动作栏和导航抽屉。操作栏中有一个按钮用于打开和关闭导航抽屉。我想把它的颜色改成红色。我该怎么做?

  • 如何更改searchview中黑色箭头(后退按钮)的颜色,我已尝试使用以下代码进行自定义 但它不起作用