2014-10-02 129 views
4

我使用Google遊戲服務作爲排行榜。顯示這樣的:如何處理與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; 
} 

但是當我打開排行榜和註銷來自與谷歌谷歌UI遊戲服務(操作菜單圖標 - >設置 - >退出),我一直有我的isLogined()== 1。所以,當我打電話showLeaderboard()第二次 - 遊戲落在與例外:

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

GoogleApiClient有連接,但沒有斷開回調。 如何使用Google用戶界面處理GGS中的歌曲?

+1

挑剔:它不是返回'0'或'1'信號失敗或成功,你應該返回一個'boolean'(反正這就是Java的方法)。 – 2014-10-02 14:11:18

+0

我們有幾個平臺,爲了便於移植,常用函數使用'int'而不是'boolean'(在objc中沒有'boolean')。 – 2014-10-02 14:43:01

+0

(只是說)。無論如何,這段代碼對我來說看起來很好。你在物理設備上測試嗎?也許應該下載一個使用Google Play遊戲並自己運行它的示例項目...然後,如果示例項目正常工作,則可以將其與您當前的項目進行比較,並嘗試找到導致中斷的差異。 – 2014-10-02 19:43:21

回答

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在你的例子)。如果您也使用成就,則可能需要檢查多個請求代碼。

+0

謝謝!有用。 – 2014-10-06 11:20:45

0

只需trycatch荷蘭國際集團的showLeaderbord方法工作正常,以及通過增加.disconnect.connect,然後在catch身體再試一次

相關問題