【发布时间】: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更具体),请在您的问题中解释原因,我将编辑我的答案。