首页 > 解决方案 > 为什么广播接收器没有检测到 WIFI_P2P_CONNECTION_CHANGED_ACTION?

问题描述

所以这是我第一次使用 wifi-direct,我试图通过 wifi-direct 将我的 android 手机连接到树莓派零 w。在我的安卓手机上使用这个示例应用程序:https ://github.com/ahmontero/wifi-direct-demo

我能够在 wpa_cli 界面中的 pi 和设备名称下的手机上进入已连接状态,我在进度对话框后面看到“已连接”,显示“正在连接到 1e:67:58:4c:78:92”连接后应该将其关闭,但不是因为连接后未触发 WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION 。

我的 wpa_supplicant.conf:

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1
country=LB
ap_scan=1
device_name=
raspberry device_type=1-0050F204-1 driver_param
=use_p2p_group_interface=1
p2p_go_intent=7
p2p_go_ht40=1
p2p_listen_reg_class=81
p2p_listen_channel=1
p2p_listen_channel =reg2 =81
p2p_oper_channel=1

并做了以下事情:

在 Pi 上:

$sudo wpa_supplicant -B -dd -iwlan0 -Dnl80211 -c /etc/wpa_supplicant/wpa_supplicant.conf

$sudo wpa_cli p2p-dev-wlan0

p2p_group_add
OK
<3>P2P-GROUP-STARTED p2p-wlan0-0 GO ssid="DIRECT-VC" freq=2412 passphrase="JrLfUAJf" go_dev_addr=5a:d3:65:e8:fc:e7
wps_pbc
OK
<3>P2P -DEVICE-FOUND 1e:67:58:4c:78:92 p2p_dev_addr=1e:67:58:4c:78:92 pri_dev_type=10-0050F204-5 name='HUAWEI' config_methods=0x188 dev_capab=0x25 group_capab=0x0 wfd_dev_info =0x00101c440032 新=1
<3>P2P-PROV-DISC-PBC-REQ 1e:67:58:4c:78:92 p2p_dev_addr=1e:67:58:4c:78:92 pri_dev_type=10-0050F204-5 名称= '华为' config_methods=0x188 dev_capab=0x25 group_capab=0x0

在电话上:我从谷歌运行 wifi direct 示例应用程序,我可以看到设备及其信息,当我点击连接时,我卡在连接 progressDialog 并且无法通过该点进入连接模式,即使我看到“已连接”下设备名称。

该应用程序似乎在两部手机之间运行良好,但是在与 pi 建立连接时,WiFiDirectBroadcastReceiver.java中的这一行不会被执行

} else if (WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION.equals(action))

但是,当连接在超时后丢失时,它会被触发!

我的问题是我在这里做错了什么,为什么广播接收器没有检测到 WIFI_P2P_CONNECTION_CHANGED_ACTION?

注意:手机运行的是Android 7.1 compileSdkVersion 26 targetSdkVersion 26

编辑:

正如 Ben 在下面的回答中指出的那样,我需要在 GO 设备(在我的情况下为 PI)上运行 DHCP 服务器,所以我继续按照此链接的第一部分在 pi 上安装和配置 DHCP 服务https://www.raspberrypi.org/documentation/configuration/wireless/access-point.md 但是,我不能再成功运行 sudo wpa_supplicant -B -dd -iwlan0 -Dnl80211 -c /etc/wpa_supplicant/wpa_supplicant.conf 命令因为它可能与 dhcp conf 冲突?知道如何在运行 DHCP 时启用 p2p 吗?

标签: androidraspberry-piwifi-directwifip2praspberry-pi-zero

解决方案


您的 Raspberry Pi 处于 GO 角色,需要充当 DHCP 服务器。WIFI_P2P_CONNECTION_CHANGED_ACTION具有客户端角色的 Android 设备在通过 DHCP 从 GO 接收到 IP 地址之前不会广播。

有关更多详细信息,请参见我的答案。


推荐阅读