我有一个播放器列表(ListView)。每个项目都有两个按钮“开始”和“停止”。当我点击“开始”颜色“开始”按钮改变红色并开始移动搜索栏。当点击“停止”按钮颜色“开始”时,开始为黑色,搜索栏进度变为零。当歌曲以彩色按钮结束时,“开始”也变为黑色,搜索栏进度变为零。
holder.start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
releaseMP();
startPlayProgressUpdater(holder.seekBar, holder.start);
try {
mediaPlayer = new MediaPlayer();
global_position = position;
mediaPlayer.setDataSource(recordBeans.get(global_position).getFile());
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.prepareAsync();
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
holder.seekBar.setMax(mediaPlayer.getDuration());
mediaPlayer.start();
recordBeans.get(global_position).setPlay(true);
holder.start.setTextColor(Color.RED);
startPlayProgressUpdater(holder.seekBar, holder.start);
}
});
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
releaseMP();
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
});
这是通过以下方法实现的:
public void startPlayProgressUpdater(final SeekBar seekBar, final Button start) {
if (mediaPlayer != null) {
recordBeans.get(global_position).setSeekPos(mediaPlayer.getCurrentPosition());
if ((Integer) seekBar.getTag() == global_position) {
seekBar.setProgress(recordBeans.get(global_position).getSeekPos());
}
Runnable notification = new Runnable() {
public void run() {
startPlayProgressUpdater(seekBar, start);
}
};
handler.postDelayed(notification, 1000);
} else {
recordBeans.get(global_position).setPlay(false);
start.setTextColor(Color.BLACK);
recordBeans.get(global_position).setSeekPos(0);
seekBar.setProgress(0);
}
}
当我点击“停止”或歌曲结束时,播放器变为NULL
并再次更改颜色按钮。它在所有这些方法中实现:
holder.stop.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
if ((Integer) v.getTag() == global_position && mediaPlayer != null) {
mediaPlayer.release();
mediaPlayer = null;
}
}
});
和
private void releaseMP() {
if (mediaPlayer != null) {
try {
mediaPlayer.release();
mediaPlayer = null;
} catch (Exception e) {
e.printStackTrace();
}
}
}
如果我在播放歌曲时工作,我想要相同的功能点击“开始”另一首歌。即一首新歌开始播放,彩色按钮“开始”变为红色,前一个按钮“开始”再次变黑。
为此我点击“开始”调用方法时:
releaseMP();
startPlayProgressUpdater(holder.seekBar, holder.start);
并且该方法有效但数据未清除。但如果我点击“停止”,则清除所有之前歌曲的数据。我做错了什么?
答案 0 :(得分:0)
我认为您打算在停止按钮OnClick中调用reset()
,而不是release()。尝试在主容器OnStop()
reset()
此方法重置媒体播放器
release()
此方法释放附加了MediaPlayer对象的所有资源