2016-10-04 53 views
0

我基於關閉演示活動在這裏寫一個Android應用程序:DemoActivity.java

我希望能夠翻轉的Android設備的屏幕(縱向到橫向或反之亦然),保持用戶登錄並播放音樂。目前我能夠保持用戶登錄,但我堅持如何保存播放狀態。

在我的onCreate:Spotify的:保存回放狀態信息

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

的onSaveInstanceState我:

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

我setPlayer(不包括身份驗證,因爲用戶將已經登錄):

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

我的親的樣品情況blem:

  • 用戶按下「登錄」按鈕,登錄到Spotify的帳戶
  • 用戶按下「播放」按鈕和Spotify的曲目開始播放
  • 用戶從縱向翻轉裝置,以景觀
  • 應用自動登錄基於用戶保存的數據
  • Spotify的曲目將停止播放(應保持在保存時間玩)

謝謝你的幫助。

回答

0

經過一番研究,我想我已經制定了如何保存必要的播放狀態信息。 在我的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); 
      } 
     } 
    } 

我的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); 
} 

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

有了這個代碼,通過翻轉我的設備所產生的新的活動可以訪問播放狀態和以前活動的元數據信息。然而,音樂曲目仍然不會恢復在新的活動玩,因爲當舊的活性被破壞它也破壞了球員:

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

我不能再訪問此認證的球員,即使我創建一個新的使用相同的訪問令牌用於創建原始(錯誤:無法初始化播放器:播放器已經關閉)。如何實現這是一個單獨的問題。