Android 用户使用 Deezer SDK 登录时音乐不播放

Music not playing when user logged in with Deezer SDK for Android

我正在使用 Deezer Android SDK (0.10.16) 并尝试使用 PlaylistPlayer 播放歌曲。 即使我以最基本的方式使用它,我也有一个奇怪的问题:

mPlaylistPlayer = new PlaylistPlayer(getActivity().getApplication(), mDeezerConnect,
                    new WifiAndMobileNetworkStateChecker());
mPlaylistPlayer.playPlaylist(451051205);

此代码在用户登录时不播放任何内容。我没有错误或警告,音乐只是没有开始。 (当我在这种情况下使用音量控制时,音量控制会改变 phone 音量而不是媒体音量,所以我确定没有媒体启动)。

奇怪的是:当用户未登录 - 并且 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())==真

我这样启动播放器(在我的活动中):

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

向最后一个片段传递参数有点脏,但在我未连接时效果很好,而当我连接时,播放器状态始终为 STOPPED。

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