我正在使用Deezer Android SDK(0.10.16),我尝试使用PlaylistPlayer播放歌曲。 即使我以最基本的方式使用它,我也有一个奇怪的问题:
mPlaylistPlayer = new PlaylistPlayer(getActivity().getApplication(), mDeezerConnect,
new WifiAndMobileNetworkStateChecker());
mPlaylistPlayer.playPlaylist(451051205);
当用户登录时,此代码不会播放任何内容。我没有任何错误或警告,音乐也没有开始。 (在这种情况下,当我使用音量控制时,音量控制会改变手机音量而不是媒体音量,因此我确定没有启动媒体)。
奇怪的是:当用户未登录 - 并且DeezerConnect已创建但尚未授权 - 或者登录然后注销时,将播放歌曲(每次播放30秒)。
我这样做了:
在我的活动中
public class DrawerActivity extends ActionBarActivity {
...
DeezerConnect deezerConnect = null;
PlaylistPlayer mPlaylistPlayer = null;
...
@Override
protected void onCreate(Bundle savedInstanceState) {
deezerConnect = new DeezerConnect(this, applicationID);
...
}
@Override
public void onNavigationDrawerItemSelected(int position) {
FragmentManager fragmentManager = getSupportFragmentManager();
//The user will connect here
if(position==2){
fragmentManager.beginTransaction()
.replace(R.id.container, AccountsFragment.newInstance(deezerConnect))
.commit();
}
}
用户在我的AccountsFragments
中连接@Override
public void onClick(View v) {
if(v == deezerConnectBtn){
if(!mDeezerConnect.isSessionValid())
mDeezerConnect.authorize(getActivity(), DrawerActivity.permissions, mDeezerDialogListener);
else {
mDeezerConnect.logout(getActivity());
deezerLoginTxt.setText("You're not connected");
}
}
}
这有效,我可以获取用户信息,返回另一个片段,仍然获得Boolean.toString(deezerConnect.isSessionValid())== true。
但是当我从这个活动中启动一个玩家时,当我用Boolean.toString(deezerConnect.isSessionValid())== false启动它时它处于PLAYING状态,而当Boolean.toString(deezerConnect.isSessionValid()时它是STOPPED )==真
我像这样启动播放器(在我的活动中):
getSupportFragmentManager().beginTransaction()
.replace(R.id.container, PlayerFragment.newInstance(locationId, playlistId, deezerConnect, mPlaylistPlayer))
.commit();
然后在我的PlayerFragment中:
private static PlaylistPlayer mPlaylistPlayer;
private static DeezerConnect mDeezerConnect;
@Override
public static PlayerFragment newInstance(String locationId, String playlistId, DeezerConnect deezerConnect, PlaylistPlayer playlistPlayer) {
PlayerFragment fragment = new PlayerFragment();
...
mPlaylistPlayer = playlistPlayer;
mDeezerConnect = deezerConnect;
}
...
@Override
public void onCreate(Bundle savedInstanceState) {
if(mPlaylistPlayer==null){
try {
mPlaylistPlayer = new PlaylistPlayer(getActivity().getApplication(), mDeezerConnect,
new WifiAndMobileNetworkStateChecker());
mPlaylistPlayer.playPlaylist(mPlaylistId);
mListener.onFragmentInteraction(mPlaylistPlayer);
} catch (TooManyPlayersExceptions tooManyPlayersExceptions) {
tooManyPlayersExceptions.printStackTrace();
Toast.makeText(getActivity(), "toomanyplayers", Toast.LENGTH_SHORT).show();
} catch (DeezerError deezerError) {
Toast.makeText(getActivity(), "deezerError", Toast.LENGTH_SHORT).show();
deezerError.printStackTrace();
}
}
}
将参数传递给最后一个片段有点脏,但是当我没有连接时它会很好地工作,而当我没有连接时,播放器状态总是被停止。
答案 0 :(得分:0)
这不是一个真正的解决方案,但我发现问题只发生在模拟器上(我使用的是Genymotion),而不是真正的设备。 我仍然不知道为什么,但至少音乐会播放。