2016-10-04 1 views
0

Ich bin eine Android-Anwendung zu schreiben hier der Demo-Aktivität basierte weg: DemoActivity.java

Ich mag den Bildschirm eines Android-Gerät kippen können (Hochformat auf Querformat oder umgekehrt) und halten Sie den Benutzer angemeldet und die Musik spielt. Momentan kann ich den Benutzer angemeldet lassen, aber ich bin nicht sicher, wie ich den Wiedergabezustand speichern kann.

In meinem onCreate:Spotify: speichert Wiedergabe Zustandsinformationen

if(savedInstanceState != null) { 
     String accessToken = savedInstanceState.getString("accesstoken"); 
     Config player_Config = new Config(this, accessToken, CLIENT_ID); 
     setPlayer(player_Config); 
     mCurrentPlaybackState = savedInstanceState.getParcelable("playbackstate"); 
    } 

mein onSaveInstanceState:

@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 
    savedInstanceState.putString("accesstoken", accessToken); 
    savedInstanceState.putParcelable("playbackstate", mCurrentPlaybackState); 
    super.onSaveInstanceState(savedInstanceState); 
} 

mein setPlayer (enthält keine Authentifizierung, da der Benutzer bereits in würde angemeldet):

public void setPlayer(Config player_Config) { 
    Spotify.getPlayer(player_Config, this, new SpotifyPlayer.InitializationObserver() { 

     @Override 
     public void onInitialized(SpotifyPlayer spotifyPlayer) { 
      myPlayer = spotifyPlayer; 
      myPlayer.addConnectionStateCallback(HostPartyActivity.this); 
      myPlayer.addNotificationCallback(HostPartyActivity.this); 
      updateUIElements(); 
     } 

     @Override 
     public void onError(Throwable throwable) { 
      Log.e("HostPartyActivity", "Could not initialize player: " + throwable.getMessage()); 
     } 
    }); 
} 

Beispielsituation meines Profis blem:

  • Benutzer drückt "Anmelden" klicken und Protokolle in Spotify Konto
  • Benutzer drückt Taste "Play" und eine Spotify Spur beginnt
  • zu Landschaft
  • Benutzer blättert Gerät von Portrait zu spielen
  • App automatisch protokolliert in der basierten Benutzerdaten gespeichert
  • Spotify Track hört auf zu spielen (sollten halten bei gesparte Zeit spielen)

Danke für jede Hilfe.

Antwort

0

Nach ein paar Recherchen habe ich herausgefunden, wie ich die erforderlichen Informationen zum Wiedergabestatus speichern kann. in meinem onCreate:

if(savedInstanceState != null) { //restore instance 
     accessToken = savedInstanceState.getString("accesstoken"); 
     if(accessToken != null) { //user was logged in 
      Config player_Config = new Config(this, accessToken, CLIENT_ID); 
      setPlayer(player_Config); 
      /* 
      * player is destroyed when new activity is started, so I need to get a new authentication code 
      * for the new activity's player 
      */ 

      myCurrentPlaybackState = savedInstanceState.getParcelable("playbackstate"); 
      myMetadata = savedInstanceState.getParcelable("metadata"); 
      if(myCurrentPlaybackState != null && myMetadata != null) { //user has played a song 
       myPlayer.playUri(myMetadata.currentTrack.uri, (int)myMetadata.currentTrack.indexInContext, (int)myCurrentPlaybackState.positionMs); 
      } 
     } 
    } 

mein onSaveInstanceState:

@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 
    savedInstanceState.putString("accesstoken", accessToken); 
    if(myCurrentPlaybackState != null && myMetadata != null) { 
     savedInstanceState.putParcelable("playbackstate", myCurrentPlaybackState); 
     savedInstanceState.putParcelable("metadata", myMetadata); 
    } 
    super.onSaveInstanceState(savedInstanceState); 
} 

mein setPlayer:

public void setPlayer(Config player_Config) { 
    myPlayer = Spotify.getPlayer(player_Config, this, new SpotifyPlayer.InitializationObserver() { 

     @Override 
     public void onInitialized(SpotifyPlayer spotifyPlayer) { 
      myPlayer.addConnectionStateCallback(HostPartyActivity.this); 
      myPlayer.addNotificationCallback(HostPartyActivity.this); 
      updateUIElements(); 
     } 

     @Override 
     public void onError(Throwable throwable) { 
      Log.e("HostPartyActivity", "Could not initialize player: " + throwable.getMessage()); 
     } 
    }); 
} 

Mit diesem Code wird die neue Aktivität, die durch das Gerät Spiegeln kann den Zustand der Wiedergabe zugreifen und Metadateninformationen aus der vorherigen Aktivität. Doch nach wie vor die Musiktitel nicht wieder in der neuen Tätigkeit zu spielen, weil, wenn die alte Aktivität zerstört wird es zerstört auch den Spieler:

@Override 
protected void onDestroy() { 
    Spotify.destroyPlayer(this); 
    super.onDestroy(); 
} 

Und ich kann keinen Zugriff diese authentifizierten Spieler wieder, auch wenn ich erstelle eine neue, die dasselbe Zugriffs-Token verwendet, das zum Erstellen des Originals verwendet wurde (Fehler: Konnte Player nicht initialisieren: Player wurde bereits heruntergefahren). Wie das zu erreichen ist, ist eine separate Frage.