当用户使用Deezer SDK for Android登录时,音乐无法播放

时间:2015-01-04 16:23:15

标签: android deezer

我正在使用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();
        }
    }
}

将参数传递给最后一个片段有点脏,但是当我没有连接时它会很好地工作,而当我没有连接时,播放器状态总是被停止。

1 个答案:

答案 0 :(得分:0)

这不是一个真正的解决方案,但我发现问题只发生在模拟器上(我使用的是Genymotion),而不是真正的设备。 我仍然不知道为什么,但至少音乐会播放。