我有viewpager,它包含片段,每个片段都有MediaPlayer对象,即每个片段都附有音频。我的要求是,如果我滑动viewpager,当前片段媒体播放器应该停止,下一个片段媒体播放器应该播放。如果我向后滑动viewpager,那么当前片段媒体播放器应该停止,并且先前的片段媒体播放器应该启动。没有必要每个片段都应该附加一个音频,这就是为什么每个片段都有自己的媒体播放器对象,我已经检查音频来处理它。到目前为止,我已尝试下面的代码
在每个片段中进行可见性检查并相应地播放音频,
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
if (mPlayer != null ) {
mPlayer.start();
}
} else {
if (mPlayer != null && mPlayer.isPlaying()) {
mPlayer.pause();
mPlayer.seekTo(0);
}
}
}
如果我在片段的OnStop上发布媒体播放器对象,那么如果我再次访问相同的片段,音频将停止工作。
@Override
public void onStop() {
if (mPlayer != null && mPlayer.isPlaying()) {
mPlayer.stop();
mPlayer.reset(); // Might not be necessary, since release() is called right after, but it doesn't seem to hurt/cause issues
mPlayer.release();
mPlayer = null;
}
super.onStop();
}
如何解决这个问题?我不知道如何在viewpager的片段内控制媒体播放器。
答案 0 :(得分:0)
最好在片段中覆盖onPause()和onResume()。我们需要保存媒体播放器的当前位置。所以,我使用共享偏好来保存媒体播放器的位置
在@Override
public void onResume() {
super.onResume();
int position = getActivity().getSharedPreferences("PLAY_PAUSE", Activity.MODE_PRIVATE).getInt("CHECK_PLAY_PAUSE", 0);
if(position > 0) {
try {
mediaPlayer.setDataSource(mp3_link); //mp3_link from url to mediaplayer data source
mediaPlayer.prepare();
} catch (Exception e) {
e.printStackTrace();
}
mediaPlayer.seekTo(position);
mediaPlayer.start();
}
}
@Override
public void onPause() {
super.onPause();
if(mediaPlayer.isPlaying()) {
mediaPlayer_position = mediaPlayer.getCurrentPosition();
getActivity().getSharedPreferences("PLAY_PAUSE", Context.MODE_PRIVATE).edit().putInt("CHECK_PLAY_PAUSE", mediaPlayer_position).apply();
mediaPlayer.pause();
}
}
$renewals = Renewals::groupBy('membership_id')->orderBy('valid_upto','desc')->get();
参考:“https://www.hrupin.com/2011/02/example-of-streaming-mp3-mediafile-with-android-mediaplayer-class”