Android 我无法恢复暂停的音频
我在recycleview中有多个音频,当我暂停一个音频后,我无法恢复暂停的位置..始终从开始开始播放音频..当我单击播放或暂停时,其他媒体播放器也会执行搜索栏 这是播放暂停的点击Android 我无法恢复暂停的音频,android,media-player,Android,Media Player,我在recycleview中有多个音频,当我暂停一个音频后,我无法恢复暂停的位置..始终从开始开始播放音频..当我单击播放或暂停时,其他媒体播放器也会执行搜索栏 这是播放暂停的点击 ((HolderAudio) holder).iv_play_audio_dash.setOnClickListener(new View.OnClickListener() { @Override public void onClick
((HolderAudio) holder).iv_play_audio_dash.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
((AdapterDashBoard.HolderAudio) holder).pb_audio.setVisibility(View.VISIBLE);
if (mediaPlayer.isPlaying()){
((AdapterDashBoard.HolderAudio) holder).iv_play_audio_dash.setImageDrawable(getResources().getDrawable(R.drawable.play_audio));
((AdapterDashBoard.HolderAudio)holder).gif_soundwave.setVisibility(View.GONE);
mediaPlayer.pause();
// mediaPlayer.reset();
pausePosition=mediaPlayer.getCurrentPosition();
Log.e("cureeenntt",pausePosition+"");
((AdapterDashBoard.HolderAudio) holder).pb_audio.setVisibility(View.GONE);
}else {
Log.e("thisss","1");
prepareSong(list.get(position).getAudio(),((AdapterDashBoard.HolderAudio) holder),position);
}
}
});
这是一种准备歌曲的方法
private void prepareSong(String audio, final HolderAudio holder, final int position) {
if (mediaPlayer.isPlaying()){
mediaPlayer.pause();
mediaPlayer.reset();
}
try {
mediaPlayer.reset();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setDataSource(audio);
mediaPlayer.prepareAsync();
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
if (mp.isPlaying()){
mp.pause();
Log.e("thisss","2");
holder.pb_audio.setVisibility(View.GONE);
holder.iv_play_audio_dash.setImageDrawable(getResources().getDrawable(R.drawable.pause_btn));
}
playSong(mp,holder,lastPosition,position);
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
private void playSong(final MediaPlayer mp, final RecyclerView.ViewHolder holder, final int lastPosition, final int position) {
if (mp.isPlaying()) {
mp.pause();
Log.e("thisss","3");
} else {
Log.e("thisss","4");
mp.start();
((AdapterDashBoard.HolderAudio) holder).pb_audio.setVisibility(View.GONE);
((AdapterDashBoard.HolderAudio) holder).iv_play_audio_dash.setImageDrawable(getResources().getDrawable(R.drawable.pause_btn));
((AdapterDashBoard.HolderAudio) holder).gif_soundwave.setVisibility(View.VISIBLE);
final Handler handler = new Handler();
this.runOnUiThread(new Runnable() {
@Override
public void run() {
if (lastPosition==position){
((AdapterDashBoard.HolderAudio) holder).iv_play_audio_dash.setImageDrawable(getResources().getDrawable(R.drawable.pause_btn));
((AdapterDashBoard.HolderAudio) holder).gif_soundwave.setVisibility(View.VISIBLE);
}else {
((AdapterDashBoard.HolderAudio) holder).iv_play_audio_dash.setImageDrawable(getResources().getDrawable(R.drawable.play_audio));
((AdapterDashBoard.HolderAudio) holder).gif_soundwave.setVisibility(View.GONE);
}
int currentPosition;
int currentpos;
((AdapterDashBoard.HolderAudio) holder).seekBar.setMax((int) mp.getDuration() / 1000);
currentPosition = mp.getCurrentPosition() / 1000;
/*if (pausePosition > 1) {
currentPosition = pausePosition / 1000;
currentpos=pausePosition;
mp.start();
Log.e("thisss","5");
} else {
currentpos=mp.getCurrentPosition();
Log.e("thisss","6");
mp.start();
}*/
if (mp.isPlaying()){
((AdapterDashBoard.HolderAudio) holder).iv_play_audio_dash.setImageDrawable(getResources().getDrawable(R.drawable.pause_btn));
}else {
((AdapterDashBoard.HolderAudio) holder).iv_play_audio_dash.setImageDrawable(getResources().getDrawable(R.drawable.play_audio));
}
((AdapterDashBoard.HolderAudio) holder).seekBar.setProgress(currentPosition);
((AdapterDashBoard.HolderAudio) holder).tv_audioTimer.setText(Utility.convertDuration((long) mp.
getCurrentPosition()));
handler.postDelayed(this, 1000);
}
});
}
}
这是播放歌曲的方法
private void prepareSong(String audio, final HolderAudio holder, final int position) {
if (mediaPlayer.isPlaying()){
mediaPlayer.pause();
mediaPlayer.reset();
}
try {
mediaPlayer.reset();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setDataSource(audio);
mediaPlayer.prepareAsync();
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
if (mp.isPlaying()){
mp.pause();
Log.e("thisss","2");
holder.pb_audio.setVisibility(View.GONE);
holder.iv_play_audio_dash.setImageDrawable(getResources().getDrawable(R.drawable.pause_btn));
}
playSong(mp,holder,lastPosition,position);
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
private void playSong(final MediaPlayer mp, final RecyclerView.ViewHolder holder, final int lastPosition, final int position) {
if (mp.isPlaying()) {
mp.pause();
Log.e("thisss","3");
} else {
Log.e("thisss","4");
mp.start();
((AdapterDashBoard.HolderAudio) holder).pb_audio.setVisibility(View.GONE);
((AdapterDashBoard.HolderAudio) holder).iv_play_audio_dash.setImageDrawable(getResources().getDrawable(R.drawable.pause_btn));
((AdapterDashBoard.HolderAudio) holder).gif_soundwave.setVisibility(View.VISIBLE);
final Handler handler = new Handler();
this.runOnUiThread(new Runnable() {
@Override
public void run() {
if (lastPosition==position){
((AdapterDashBoard.HolderAudio) holder).iv_play_audio_dash.setImageDrawable(getResources().getDrawable(R.drawable.pause_btn));
((AdapterDashBoard.HolderAudio) holder).gif_soundwave.setVisibility(View.VISIBLE);
}else {
((AdapterDashBoard.HolderAudio) holder).iv_play_audio_dash.setImageDrawable(getResources().getDrawable(R.drawable.play_audio));
((AdapterDashBoard.HolderAudio) holder).gif_soundwave.setVisibility(View.GONE);
}
int currentPosition;
int currentpos;
((AdapterDashBoard.HolderAudio) holder).seekBar.setMax((int) mp.getDuration() / 1000);
currentPosition = mp.getCurrentPosition() / 1000;
/*if (pausePosition > 1) {
currentPosition = pausePosition / 1000;
currentpos=pausePosition;
mp.start();
Log.e("thisss","5");
} else {
currentpos=mp.getCurrentPosition();
Log.e("thisss","6");
mp.start();
}*/
if (mp.isPlaying()){
((AdapterDashBoard.HolderAudio) holder).iv_play_audio_dash.setImageDrawable(getResources().getDrawable(R.drawable.pause_btn));
}else {
((AdapterDashBoard.HolderAudio) holder).iv_play_audio_dash.setImageDrawable(getResources().getDrawable(R.drawable.play_audio));
}
((AdapterDashBoard.HolderAudio) holder).seekBar.setProgress(currentPosition);
((AdapterDashBoard.HolderAudio) holder).tv_audioTimer.setText(Utility.convertDuration((long) mp.
getCurrentPosition()));
handler.postDelayed(this, 1000);
}
});
}
}
似乎每次都使用相同的MediaPlayer对象,并在prepareSong上重新初始化。你可以保留歌曲的暂停时间,并从存储的时间开始播放。我确实暂停了播放。但现在的情况是,当我单击“暂停并播放”时,其他媒体播放器seekbar也会更改@Jay