如何处理与Google游戏服务的脱节?

时间:2014-10-02 14:09:29

标签: android

我将Google游戏服务用于排行榜。显示如下:

static public void showLeaderboard(String lid)
{
  if (isLogined() == 1)
  {
    Log.i(TAG, "Showing leaderboard...");
    Intent intent = Games.Leaderboards.getLeaderboardIntent(mClient, lid);
    mApp.startActivityForResult(intent, 1);
  }
}

static public int isLogined()
{
  if (mClient != null && mClient.isConnected())
    return 1;
  return 0;
}

但是当我打开排行榜并使用Google UI从Google游戏服务退出时(操作溢出菜单图标 - >设置 - >退出)我继续使用我的isLogined()== 1.因此,当我调用showLeaderboard时( )第二次 - 游戏有例外:

java.lang.SecurityException: Not signed in when calling API

GoogleApiClient具有连接回调,但没有断开连接。 如何使用谷歌UI处理GGS唱歌?

2 个答案:

答案 0 :(得分:8)

为了让所有事情保持同步,你必须正确实施onActivityResult

这应该看起来如下:

@Override
protected void onActivityResult(int request, int response, Intent data) {

   // check for "inconsistent state"
   if ( responseCode == GamesActivityResultCodes.RESULT_RECONNECT_REQUIRED && requestCode == <your_request_code_here> )  {  
      // force a disconnect to sync up state, ensuring that mClient reports "not connected"
      mClient.disconnect();
   }
}

注意:只需确保将代码中的<your_request_code_here>替换为您使用的请求代码(在您的示例中仅为1)。如果您也使用成就,则可能需要检查多个请求代码。

答案 1 :(得分:0)

通过添加UPDATE MEMBERS SET ADULT='N' WHERE MEMBERID IN (SELECT MEMBERID FROM MEMBERS WHERE AGE<16) try,只需catch showLeaderbord .disconnect方法也可以正常工作,然后再次在{{1}中重试身体