WiFiP2P
,那么你需要为一些困难做好准备。不幸的是(如你可能已经注意到的 :)),WiFiP2P
Android 官方文档并不是那么出色。不同的设备表现出不同的行为(例如它们以不同的顺序调用一些 WifiP2P
事件),而文档根本没有涵盖此内容。要实现稳定的连接,需要采取非传统的甚至是激进的措施。获取 WifiP2P
连接与显示系统窗口密不可分(询问您是否真的想连接到设备)。WifiP2P
解决方案之前,有几件事情需要考虑:
WifiP2P
。 WifiP2P
(Android 对 Wifi-Direct
的实现)并不完全符合你的需求。使用 WifiP2P
可能意味着房主创建一个 WifiP2P-group
,而任何想要加入房间的人都必须连接到这个 WifiP2p-group
。问题在于,Android 不允许单个设备同时加入多个组(这也意味着它不允许同时创建多个组)。当您已经连接到设备时,检测可用的 WiFiP2P
设备周围的更改也很困难。如果你真的想使用Wifi-Direct
,你可能需要使用一个WiFiP2P-group
并将所有设备连接到它。这个组会像普通网络一样运作,并且所有与游戏房间相关的东西都需要由一个节点作为典型服务器(或者可能不是典型服务器,而是其他网络解决方案)来管理。WifiP2P
,只需使用常规的Wifi
。将所有设备连接到一个网络(甚至可以在其中一个设备上启动热点),整个连接过程可以相对简单地在后台执行,用户无需直接参与。人类可读的房间名称不是问题,因为你可以从你的服务器发送任何内容。WifiP2P
,你需要找到一些方法将你的“可读”名称广播到其他设备。WifiP2P
连接与显示系统窗口一起进行(询问是否确实要连接到设备)。Android-ao12ij219sa
(一些编程上不可更改的系统设备名称)设备A:已连接,正在发送房间名称
设备B:获取了设备A的房间名称,并断开连接(未来的连接请求也会导致系统窗口的显示)
在执行步骤1-7期间,没有其他设备可以连接到设备A(因此在此期间没有其他设备可以获取房间名称)。
可采取的措施:
使用WifiP2P Service Discovery
。它允许广播某些信息而无需建立连接。不幸的是,它的文档甚至比WifiP2P
本身还要差,可能还不太可靠(主观上)。如果您想基于此创建可靠的解决方案,您需要花费数小时进行测试并找到可能未能正常工作的不同情况。我知道从经验上说这是可能的,但需要您实现多个解决方法,以便始终获得稳定的WiFiP2P
连接。
以某种其他方式向您的设备发送那些(不可更改的)WifiP2P
名称与创建的房间名称之间的映射。例如通过您的服务器API或其他方式...
@hide
来使用它。我尝试使用它来更改设备名称,它完美地工作了。但是发现过程仍然存在一些奇怪的问题。例如,即使设备B的wifi关闭,设备A仍会收到包含设备B在对等列表中的WIFI_P2P_PEERS_CHANGED_ACTION意图。 - Niakros