2016-06-30 7 views
2

In meinem Projekt versuche ich einen Media Player zu erstellen, der einen Shoutcast Stream abspielt. Alles schien gut zu funktionieren, bis ich die Zurück-Taste auf meinem Gerät drückte, was meiner Meinung nach die Aktivität stoppt und dazu führt, dass das Gerät die Aktivität neu erstellt, wenn es erneut gestartet wird. Das Problem ist, wenn die Aktivität neu erstellt wird, verliere ich die Kontrolle über den Mediaplayer und ein neuer Mediaplayer wird erstellt.Ich verliere die Kontrolle über den Mediaplayer, wenn die Aktivität neu erstellt wird

Ich muss in der Lage sein, die Kontrolle des Mediaplayers zu diesem Zeitpunkt zurück zu haben. Wie ist es möglich?

Dieser Teil des Codes gehört

super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    btn = (Button) findViewById(R.id.button); 
    if (mediaPlayer == null){ 
     mediaPlayer = new MediaPlayer(); 
    try { 
     mediaPlayer.setDataSource(getString(R.string.yayin)); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    mediaPlayer.prepareAsync(); 
    } 

    if(!isPlaying){ 

     btn.setBackgroundResource(R.drawable.oynat); 

    } 
    else{ 

     btn.setBackgroundResource(R.drawable.durdur); 

    } 
    btn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if(!isPlaying){ 

       playOnReady(); 
       isPlaying = true; 
       btn.setBackgroundResource(R.drawable.durdur); 

      } 
      else{ 

       mediaPlayer.reset(); 
       isPlaying = false; 
       btn.setBackgroundResource(R.drawable.oynat); 

      } 
     } 
    }); 

Dieser Teil des Codes onCreate gehört zur Funktion playOnReady()

private void playOnReady(){ 

    mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 

     @Override 
     public void onPrepared(MediaPlayer mp) { 
      mp.start(); 

     } 
    }); 

} 
+0

Verwenden Sie eine einzelne Instanz von MediaPlayer wie folgt. http://stackoverflow.com/questions/14135459/create-only-one-object-for-a-class-and-reuse-same- object. So haben Sie überall in der App die gleiche Instanz. –

+0

Ich habe das Problem mit einem Service gelöst! Danke trotzdem! –

Antwort

0

Mit Tutorial this habe ich es geschafft, einen Dienst zu bauen, der den Mediaplayer bedient, den ich jederzeit kontrollieren kann.

0

einen Blick auf das Flussdiagramm Android Activity Lifecycle Nehmen: https://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle

Sie müssen den Pfad berücksichtigen, in dem onPause aufgerufen wird, wenn Sie die Aktivität verlassen, und onResume wird aufgerufen, wenn Sie sie erneut eingeben. Die Lösung für Sie könnte so einfach sein wie einige/alle Ihren Code von onCreate in onResume zu verschieben.

+0

Ich habe den Zyklus verstanden, aber wenn ich den zugehörigen Teil zu onResume verschoben habe hat sich nichts geändert. Trotzdem habe ich nicht die Kontrolle über den Spieler. –