2016-11-25 1 views
0

Ich habe Viewpager, die Fragmente enthält, jedes Fragment hat MediaPlayer-Objekt, das heißt jedes Fragment hat Audio an es angehängt. Meine Anforderung ist, wenn ich den viewpager wische, sollte der aktuelle Fragment-Mediaplayer stoppen und der nächste Fragment-Mediaplayer abgespielt werden. Wenn ich den viewpager rückwärts wische, sollte der aktuelle Fragment Media Player stoppen und der vorherige Fragment Media Player sollte starten. Es ist nicht notwendig, dass jedes Fragment mit einem Audio verbunden ist, deshalb hat jedes Fragment ein eigenes Media-Player-Objekt und ich habe den Check auf Audio gestellt, um damit umgehen zu können. Bisher habe ich unten Code versuchtUmgang mit MediaPlayer-Objekt in einem Fragment innerhalb der Ansicht Pager

In jedem Fragment ist mit einer Sichtprüfung und das Audio entsprechend spielen,

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

Wenn ich loslassen Media Player Objekt in OnStop von Fragment dann Audio aufhören zu arbeiten, wenn ich wieder kommt zu demselben Fragment.

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

Wie löst man das? Ich kann nicht Media Player innerhalb des Fragments eines Viewpager steuern.

Antwort

0

Es ist besser onPause() und onResume() im Fragment zu überschreiben. Und wir müssen die aktuelle Position für den Media Player speichern. Daher verwende ich die gemeinsame Einstellung, um die Position für den Media Player zu speichern.
In 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(); 
    } 
} 

Ref: "https://www.hrupin.com/2011/02/example-of-streaming-mp3-mediafile-with-android-mediaplayer-class"

Verwandte Themen