2016-11-25 10 views
0

フラグメントを保持するビューページを持っています。各フラグメントにはMediaPlayerオブジェクトがあります。つまり、各フラグメントにはオーディオが添付されています。私の要件は、私はビューページをスワイプし、現在のフラグメントメディアプレーヤーが停止し、次のフラグメントメディアプレーヤーが再生する必要があります。私がviewpagerを後方にスワイプすると、現在のフラグメントメディアプレーヤーが停止し、以前のフラグメントメディアプレーヤーが起動するはずです。それぞれのフラグメントにオーディオが添付されている必要はないので、各フラグメントが独自のメディアプレーヤーオブジェクトを持っている理由と、それを処理するためにオーディオのチェックを入れているのです。これまでのところ私は、視認性のチェックを持って、私は再び来る場合、私はオーディオストップが作動し、その後フラグメントのOnStopにメディアプレーヤーオブジェクトを解放した場合、それに応じてViewPager内のフラグメント内のMediaPlayerオブジェクトの処理方法

@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(); 
    } 

解決方法私はviewpagerの断片の中でメディアプレーヤーを制御する方法を知らない。

答えて

0

フラグメントのonPause()およびonResume()をオーバーライドする方がよいです。メディアプレーヤーの現在の位置を保存する必要があります。だから、私はメディアプレーヤーの位置を保存するために、共有の設定を使用しています。 "https://www.hrupin.com/2011/02/example-of-streaming-mp3-mediafile-with-android-mediaplayer-class"

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(); 
    } 
} 

参考に

関連する問題