2016-10-04 59 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(); 
} 

我不能再访问此认证的球员,即使我创建一个新的使用相同的访问令牌用于创建原始(错误:无法初始化播放器:播放器已经关闭)。如何实现这是一个单独的问题。