在 wifi 切换和打开断开连接和对等方断开连接时通信丢失未被触发



我正在使用Google示例游戏"ButtonClicker2000"中的代码,在这里找到: https://github.com/playgameservices/android-basic-samples

我有 3 个机器人在 genymotion 中运行这个游戏,还有一个在我自己的手机上运行,从安卓工作室调试它们。 我已经到了在发生网络问题时尝试优雅地处理断开连接的地步。 我模拟网络问题的方式是切换手机上的wifi。 (打开或关闭,相同的行为) 之后,虚拟设备不再接收来自手机的实时消息,并且我的手机不再接收来自其他设备的实时消息。 但是,我的手机从未进入 onDisconnect(),而其他设备也从未进入 Peers断开连接。 如果我在通信停止后退出手机上的应用程序,则 onPeerLeft 会在其他设备上触发。

我如何确保游戏中设备之间的通信不会在用户在某个时候进入或超出其 wifi 范围时丢失? 如果无法做到这一点,我如何至少确保 onDisconnect 事件从违规设备触发,而 onPeers断开连接事件在其他设备上触发?

如果我们按照文档所述进行操作,onDisconnect通常在远程服务出现问题(崩溃或资源问题)时发生。 关闭WiFi看起来并不符合这些标准。[ onPeersDisconnected ](https://developers.google.com/android/reference/com/google/android/gms/games/multiplayer/realtime/RoomStatusUpdateListener#onPeersDisconnected(com.google.android.gms.games.multiplayer.realtime.Room, java.util.List)))在参与者与房间断开连接时调用。

确定onP2PConnected在连接时是否被调用,在断开连接时是否onP2PDisconnected(希望这可以捕获WiFi切换情况),因为我认为当您使用实时多人游戏时它更合适。

您还可以在文档的实时多人游戏部分阅读有关它的更多信息。

希望这有帮助!