Android 当被邀请的玩家离开游戏时调用onDisconnectedFromRoom()

Android 当被邀请的玩家离开游戏时调用onDisconnectedFromRoom(),android,google-play-games,Android,Google Play Games,我与另外两名玩家(均直接邀请)创建了一个实时多人游戏。我是这样做的: 创建了玩家选择意图 Intent intent = Games.RealTimeMultiplayer.getSelectOpponentsIntent(getApiClient(), 1, MAX_PLAYERS); startActivityForResult(intent, REQ_GOOGLE_INVITE); onActivityResult()上的执行了以下操作: private void onPlayersIn

我与另外两名玩家(均直接邀请)创建了一个实时多人游戏。我是这样做的:

创建了玩家选择意图

Intent intent = Games.RealTimeMultiplayer.getSelectOpponentsIntent(getApiClient(), 1, MAX_PLAYERS);
startActivityForResult(intent, REQ_GOOGLE_INVITE);
onActivityResult()上的执行了以下操作:

private void onPlayersInvited(Intent data) {
    // get the invitee list
    final ArrayList<String> invitees = data.getStringArrayListExtra(Games.EXTRA_PLAYER_IDS);

    Bundle autoMatchCriteria = RoomConfig.createAutoMatchCriteria(1, 5, 0);

    // create the activeRoom and specify a variant if appropriate
    RoomConfig.Builder roomConfigBuilder = makeBasicRoomConfigBuilder();
    roomConfigBuilder.addPlayersToInvite(invitees);
    roomConfigBuilder.setAutoMatchCriteria(autoMatchCriteria);
    RoomConfig roomConfig = roomConfigBuilder.build();
    Games.RealTimeMultiplayer.create(getApiClient(), roomConfig);

    // prevent screen from sleeping during handshake
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}


private RoomConfig.Builder makeBasicRoomConfigBuilder() {
    return RoomConfig.builder(this).setMessageReceivedListener(this).setRoomStatusUpdateListener(this).setSocketCommunicationEnabled(true)
            .setVariant(subcategory.getId().intValue());
}
private void onPlayersInvited(意图数据){
//获取被邀请者列表
最终ArrayList invites=data.getStringArrayListXTRA(Games.EXTRA\u PLAYER\u id);
Bundle autoMatchCriteria=RoomConfig.createAutoMatchCriteria(1,5,0);
//创建activeRoom并指定一个变量(如果合适)
RoomConfig.Builder roomConfigBuilder=makeBasicRoomConfigBuilder();
roomConfigBuilder.AddPlayerToInvite(受邀者);
roomConfigBuilder.setAutoMatchCriteria(autoMatchCriteria);
RoomConfig-RoomConfig=roomConfigBuilder.build();
Games.RealTimeMultiplayer.create(getApiClient(),roomConfig);
//在握手过程中防止屏幕睡眠
getWindow().addFlags(WindowManager.LayoutParams.FLAG\u保持屏幕打开);
}
私有RoomConfig.Builder makeBasicRoomConfigBuilder(){
返回RoomConfig.builder(this).setMessageReceivedListener(this).setRoomStatusUpdateListener(this).setSocketCommunicationEnabled(true)
.setVariant(子类别.getId().intValue());
}
我的游戏在所有3台设备上开始,但当我在一台受邀设备上断开与游戏的连接时,会调用主机设备上的onDisconnectedFromRoom(),因此我猜游戏会自动取消,这很遗憾,因为我想继续游戏,直到出现所需的最少玩家数

有什么方法可以防止这种情况发生吗?

在onDisconnectedFromRoom()回调中,您可以得到Room对象。你可以打电话查询房间里有多少人

int count = room.getParticipantIds().size();

若玩家数量超过最小值,则继续游戏。

设置自动机Cryteria会导致奇怪的行为。我删除了它,现在它运行良好

,但是,即使调用了onDisconnectedFromRoom(),该用户仍会从其他玩家那里获取消息吗?您可以很容易地进行测试。只需在调用onDisconnectedFromRoom()后尝试发送数据。您是否从RoomStatusUpdateListener实现了其他方法?当然,我实现了它们。如果调用onPeersDisconnected(),它将无法工作,并且从现在起,主机参与者在房间中已断开连接状态。。。