2016-05-23 19 views
0

Ich versuche, ein Video anzuhalten, wenn Activity onPause() aufgerufen wird. Und dann setze es fort und spiele weiter in dem Moment, in dem es übrig war, als die Aktivität wieder aufgenommen wurde.MediaPlayer beim Fortsetzen der Aktivität neu starten

Ich habe viele Beiträge gelesen, wie dies zu erreichen ist und zusammenzufassen, ich habe gelesen, dass ich mediaPlayer.pause() in Aktivität onPause() und mediaPlayer.play() in Activity onResume() aufrufen sollte . Scheint einfach, aber ich halte Illegal in onResume bekommen: mediaPlayer.play()

Dies ist, wo ich Mediaplayer und Videoview bin Einstellung:

videoView.setMediaController(mediaController); 
     videoView.setVideoURI(videoUri); 
     videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
      @Override 
      public void onPrepared(MediaPlayer mp) { 
       // Pass MediaPlayer to control playback speed 
       mediaController.setMediaPlayer(mp); 
       mp.start(); 
       mediaPlayer = mp; 
       hideProgressBar(); 
      } 
     }); 

Dieser Code wird aufgerufen, nachdem ich videoUri von einem API-Aufruf erhalten , dieser Aufruf erfolgt in onCreate().

Und in onResume() onPause():

@Override 
protected void onResume() { 
    super.onResume(); 

    if (mediaPlayer != null) { 
     mediaPlayer.start(); 
    } 

} 

@Override 
protected void onPause() { 
    super.onPause(); 

    if (mediaPlayer != null) { 
     mediaPlayer.pause(); 
    } 
} 
+0

wo instanziieren Sie den Mediaplayer-Objekt? Wird es nicht jedes Mal erstellt, wenn die Aktivität erstellt wird? –

+0

@Perroloco Ich bekomme mp von onPrepared() wie oben gezeigt, und ich ordne das mp auf mediaPlayer, was ein Klassenattribut ist, um die Referenz von mp zu behalten, damit ich es von onPause und onResume aufrufen kann. – IRPdevelop

Antwort

1

Ok, dachte ich es aus. In onPreparedListener() füge ich eine Überprüfung hinzu, um zu überprüfen, ob die App zuvor angehalten wurde oder nicht. Wenn es pausiert wurde, verwende ich seekTo(), ansonsten spiele ich das Video einfach von Anfang an.

videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
      @Override 
      public void onPrepared(MediaPlayer mp) { 
       // Pass MediaPlayer to control playback speed 
       mediaController.setMediaPlayer(mp); 
       mediaPlayer = mp; 
       if (resumedActivity) { 
        mp.seekTo(pausedMilliSec); 
       } 
       mp.start(); 
       hideProgressBar(); 
      } 
     }); 

Und in onPause():

@Override 
protected void onPause() { 
    super.onPause(); 

    if (mediaPlayer != null) { 
     resumedActivity = true; 
     pausedMilliSec = mediaPlayer.getCurrentPosition(); 
    } 
} 
Verwandte Themen