如何在视图寻呼机内的片段内处理MediaPlayer对象

时间:2016-11-25 17:32:07

标签: android android-fragments audio android-viewpager

我有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的片段内控制媒体播放器。

1 个答案:

答案 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