7

我正在编写一个 Wifi Direct 游戏,但是当一个用户拒绝加入连接的邀请时,WifiP2pDevice 状态出现了问题。

  1. 电话 A 发起与电话 B 的连接
  2. 电话 B 状态变为已邀请(如电话 A 上所示)
  3. 电话 B 拒绝来自电话 A 的邀请
  4. 电话 B 状态仍为 INVITED(如电话 A 所示)

不应该将状态转移回电话 A 上显示的 AVAILABLE 吗?我已经刷新了可用设备列表,但状态保持不变。即使我重新启动应用程序,它仍然显示电话 B 的状态为邀请?

这应该基于 WifiDirect 的 API 发生吗?还是我错过了什么?

编辑:更多信息

在 BroadcastReciever 中,当 Intent 是 WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION 时,管理器使用实现 PeerListListener 的 Fragment 请求对等点,它只打印可用设备的列表和这些设备的信息(包括状态)。因此,当电话 A 使用 manager.connect() 发送邀请时,它会将状态更改为 INVITED。但如果电话 B 拒绝,状态将保持为 INVITED。这些状态是在 notifyDataSetChanged() 上触发的。与其说是代码问题,不如说是 wifi direct 如何确定和更改设备的状态。但如果需要,我可以提供代码。

4

1 回答 1

2

如果状态为“已邀请” ,您可以取消连接

 if (fragment.getDevice().status == WifiP2pDevice.AVAILABLE
                || fragment.getDevice().status == WifiP2pDevice.INVITED) {

            manager.cancelConnect(channel, new ActionListener() {

                @Override
                public void onSuccess() {
                    Toast.makeText(WiFiDirectActivity.this, "Aborting connection",
                            Toast.LENGTH_SHORT).show();
                }

                @Override
                public void onFailure(int reasonCode) {
                    Toast.makeText(WiFiDirectActivity.this,
                            "Connect abort request failed. Reason Code: " + reasonCode,
                            Toast.LENGTH_SHORT).show();
                }
            });
        }
于 2019-03-15T03:32:40.490 回答