2016-03-28 17 views
0

Ich mache einen Audio-Player in meiner App. Es benutzt eine Viewlist und alles funktioniert perfekt. Ich kann pausieren, nächster Musikstream. Ich lade eine URL, um die Musik abzuspielen. Wenn ich die App schließe, hört die Musik auf zu spielen. Ich musste weiter spielen. Ich habe etwas über Audiofokus gelesen. Aber ich bin mir nicht sicher, wie ich es dem Code hinzufügen soll. Ich habe in meinem Manifest den wake_lock.Android Studio-Audio hört auf, wenn App geschlossen wird

Ich bin ziemlich neu in Androide, so ist es Trail und Fehler, aber diese ich kann einfach nicht herausfinden. Auch wenn ich die App schließe und sie erneut starte, wenn die Musik abgespielt wird und sie wieder hochfährt, stürzt die App ab.

public void controlMusicPlayer(String musicUrl) { 

     final String playUrl = musicUrl; 


     Log.d("Song url received:", playUrl); 
     if (!mediaPlayer.isPlaying()) { 
        playercontrol.setVisibility(View.VISIBLE); 
        btn.setBackgroundResource(R.drawable.pause); 

        new Player() 
        .execute(playUrl); 
      playPause = true; 

      Log.d("Play State:", "Starting song"); 

     } else { 

      Log.d("Play State:", "Next song is being started"); 

      playPause = true; 

      mediaPlayer.reset(); 

      btn.setBackgroundResource(R.drawable.pause); 
      if (mediaPlayer.isPlaying()) 
       mediaPlayer.pause(); 
      playPause = false; 

      new Player() 
      .execute(playUrl); 


     } 

      } 

     public View.OnClickListener pausePlay = new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 


       if (!playPause) { 

        btn.setBackgroundResource(R.drawable.pause); 
        if (intialStage) 
         new Player() 
           .execute(Urlmusic); 
        else { 
         if (!mediaPlayer.isPlaying()) 
          mediaPlayer.start(); 
        } 
        playPause = true; 
       } else { 
        btn.setBackgroundResource(R.drawable.play); 
        if (mediaPlayer.isPlaying()) 
         mediaPlayer.pause(); 
        playPause = false; 
       } 
      } 
     }; 


    /** 
    * preparing mediaplayer will take sometime to buffer the content so prepare it inside the background thread and starting it on UI thread. 
    * @author piyush 
    * 
    */ 

    class Player extends AsyncTask<String, Void, Boolean> { 
     private ProgressDialog progress; 

     @Override 
     protected Boolean doInBackground(String... params) { 
      // TODO Auto-generated method stub 
      Boolean prepared; 
      try { 

       mediaPlayer.setDataSource(params[0]); 

       mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 

        @Override 
        public void onCompletion(MediaPlayer mp) { 
         // TODO Auto-generated method stub 
         intialStage = true; 
         playPause=false; 
         btn.setBackgroundResource(R.drawable.play); 
         mediaPlayer.stop(); 
         mediaPlayer.reset(); 
        } 
       }); 
       mediaPlayer.prepare(); 
       prepared = true; 
      } catch (IllegalArgumentException e) { 
       // TODO Auto-generated catch block 
       Log.d("IllegarArgument", e.getMessage()); 
       prepared = false; 
       e.printStackTrace(); 
      } catch (SecurityException e) { 
       // TODO Auto-generated catch block 
       prepared = false; 
       e.printStackTrace(); 
      } catch (IllegalStateException e) { 
       // TODO Auto-generated catch block 
       prepared = false; 
       e.printStackTrace(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       prepared = false; 
       e.printStackTrace(); 
      } 
      return prepared; 
     } 

     @Override 
     protected void onPostExecute(Boolean result) { 
      // TODO Auto-generated method stub 
      super.onPostExecute(result); 
      if (progress.isShowing()) { 
       progress.cancel(); 
      } 
      Log.d("Prepared", "//" + result); 
      mediaPlayer.start(); 

      intialStage = false; 
     } 

     public Player() { 
      progress = new ProgressDialog(MainActivity.this); 
     } 

     @Override 
     protected void onPreExecute() { 
      // TODO Auto-generated method stub 
      super.onPreExecute(); 
      this.progress.setMessage("Buffering..."); 
      this.progress.show(); 

     } 
    } 

    @Override 
    protected void onPause() { 
     // TODO Auto-generated method stub 
     super.onPause(); 
     if (mediaPlayer != null) { 
      mediaPlayer.reset(); 
      mediaPlayer.release(); 
      mediaPlayer = null; 
     } 
    } 

    ////////////////////////////////// end music play list ///////////////////////////////////////// 

Danke für die Hilfe.

+0

Sie sollten einen Dienst verwenden, um den Ton abzuspielen, anstatt ihn nur zu spielen . –

Antwort

1

wie Sie die mediaPlayer in Methode lösen Sieht Benachrichtigung zu steuern. Diese Methode wird immer aufgerufen, wenn Sie die App schließen. Für weitere Informationen google für activity lifecycle. Wenn Sie möchten, dass Ihr Audio weiter abgespielt wird, wenn die Aktivität pausiert ist, ersetzen Sie die Methode durch onDestroy (diese wird aufgerufen, wenn finish() aufgerufen wird.)

+0

Ich werde mir diese Lösung ansehen, es scheint sehr viel Sinn zu machen. Vielen Dank – carlosx2

1

Einen Service Hintergrund starten und Ihre Audio (Media-Player) in diesem Dienst spielen, und Sie können Vordergrund Benachrichtigung nutzen die Pause Wiedergabe oder nächste usw. von dieser

+0

ist die Sache, dass der Spieler auf allen Tätigkeiten verwendet wird, ich bin nicht sicher, dass ich die Liedinformationen für alle Tätigkeiten vom Service einstellen kann. Außerdem muss ich eine Anleitung über das Verwenden der Url strömenden Musik finden. – carlosx2

+0

U kann mediaplayer benutzen in Aktivität, aber ich würde Hintergrund-Service für diese Aufgabe mit einer gut aussehenden Benachrichtigung empfehlen auch Choisce ist deins .. Nun in Ihrem Code verwenden Sie mediaplayer.setDatasource (URL), so müssen Sie kein Tutorial über die Verwendung von URL-Streaming-Musik Sie finden kann eine Menge Hilfe von diesem Beispiel-Media-Player und das bekommen Musik-Player haben eine gute Benutzeroberfläche auch https://github.com/play/play-android –

+0

danke ich werde das auschecken. – carlosx2