GoogleApiClient.isConnected()始终返回false

时间:2014-02-23 09:01:42

标签: android google-play-services google-play-games

我正在尝试在游戏中实现排行榜。 我写了这段代码:

GoogleApiClient mGoogleApiClient;
mGoogleApiClient = new GoogleApiClient.Builder(this)
    .addApi(Drive.API)
    .addScope(Drive.SCOPE_FILE)
    .build();

mGoogleApiClient.connect();
//....

while(!mGoogleApiClient.isConnected())Log.d("","NO CONNECTED");
Games.Leaderboards.submitScore(mGoogleApiClient, "MY_LEADERBOARD_ID",newscore);

为什么mGoogleApiClient.isConnected()总是返回false?

EDIT1:好的,现在它可行了(我已将Drive.API更改为Games.APIDrive.SCOPE_FILE更改为Games.SCOPE_GAME)但是当我调用submitScore()即使它是{在日志中一切正常,排行榜仍然是空的。如何检查submitScore()是否真的有效?

EDIT2:我用过

startActivityForResult(Games.Leaderboards.getLeaderboardIntent(mGoogleApiClient, "MY_LEADERBOARD_ID"), REQ_LEADERBOARD);

一切正常!

2 个答案:

答案 0 :(得分:4)

您需要向Builder(或GoogleApiClient)添加几个回调侦听器。最可能发生的是登录失败,因为您还没有权限。您需要处理该失败,以便用户可以授权您的应用。

更多阅读:http://www.androidpolice.com/2014/02/14/for-developers-google-play-services-4-2-includes-new-client-api-model-consolidates-connections-under-one-object/

答案 1 :(得分:1)

我发现由于某种原因,虽然 .connect()是异步的,并且在之后立即等待while循环是合乎逻辑的,但显然需要某些原因仍然需要在主UI线程上执行一些操作,因此isConnected()总是返回false,因为while循环实际上是阻塞.connect()。如果我可以猜测为什么我会假设调用.connect()执行一段代码,它将自己置于主UI线程队列中以便稍后执行,并通过在那里循环,你将是永远阻止那段代码执行/连接。