作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有保存片段的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);
}
}
}
@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();
}
最佳答案
最好在片段中重写onPause()和onResume()。并且我们需要为媒体播放器保存当前位置。因此,我使用共享首选项来保存媒体播放器的位置。
用onCreateView, mediaPlayer_position = getActivity().getSharedPreferences("PLAY_PAUSE", Activity.MODE_PRIVATE).getInt("CHECK_PLAY_PAUSE", 0);
@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();
}
}
关于android - 如何在 View 分页器中的 fragment 内处理MediaPlayer对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40810042/
我是一名优秀的程序员,十分优秀!