【发布时间】:2014-03-04 07:51:25
【问题描述】:
我有一个应用程序,它使用 Google Play 游戏服务实时多人游戏来自动匹配玩家。创建房间通常会成功,并且多人游戏会正常工作,除非在尝试创建房间时互联网连接中断。
如果在创建房间时网络中断,我会在 RoomUpdateListener onRoomCreated(...) 中返回 STATUS_REAL_TIME_CONNECTION_FAILED 错误。
我的应用程序在尝试创建另一个房间时卡在了 STATUS_OPERATION_IN_FLIGHT 状态。我需要清除应用程序数据才能从中恢复。
房间的原始创建失败似乎使其处于不良状态,不允许创建另一个房间。除了调用 Games.RealTimeMultiplayer.leave(...) 之外,我没有看到任何取消房间创建的方法,这需要一个我没有的房间 ID,因为房间创建从未成功。
这是我设置 RoomConfig 的方式:
final Bundle autoMatchBundle = RoomConfig.createAutoMatchCriteria(1, 1, 0);
final RoomConfig.Builder roomConfigBuilder = RoomConfig.builder(roomUpdateListener);
roomConfigBuilder.setMessageReceivedListener(realTimeMessageReceivedListener);
roomConfigBuilder.setRoomStatusUpdateListener(roomStatusUpdateListener);
roomConfigBuilder.setAutoMatchCriteria(autoMatchBundle);
roomConfig = roomConfigBuilder.build();
这是我创建房间的方式:
Games.RealTimeMultiplayer.create(googleApiClient, roomConfig);
解决方案:进入此状态时,我重新连接了 googleApiClient。
我在 RoomUpdateListener onRoomConnected 实现中执行以下操作:
@Override
public void onRoomCreated(final int statusCode, final Room room) {
if (statusCode != GamesClient.STATUS_OK) {
if (statusCode == GamesClient.STATUS_OPERATION_IN_FLIGHT) {
googleApiClient.reconnect();
}
// OMITTED ERROR CASE CODE
return;
}
// OMITTED SUCCESS CASE CODE
}
我仍然不确定为什么它会卡在这个状态。
【问题讨论】:
-
出于好奇,
onRoomCreated被调用了吗? -
另外,文档说 当前游戏连接到房间的生命周期与这个 GoogleApiClient 的生命周期有关。 所以也许你必须重启你的
GoogleApiClient。 -
谢谢@Clay!您的评论使我找到了解决方案。把它写成答案,我会接受的。
标签: java android google-play-services google-play-games