一些嵌入式设备可能没有屏幕,这时你就不能点击屏幕去开启wifi了。未来大多数物联网设备都是这样,那么如何在无屏幕情况下开启wifi呢?我们可以使用wpa_supplicant+wpa_cli来操作wifi,wpa_supplicant是服务端,用于与内核交流;wpa_cli是客户端,用于与wpa_supplicant交流;即wpa_cli首先发送命令给wpa_supplicant,wpa_supplicant再将命令转告给内核,内核完成wifi操作!!
1.开启wpa_supplicant服务端
/system/bin/wpa_supplicant -iwlan0 -Dnl80211 -c /etc/wifi/meta_wpa_supplicant.conf
meta_wpa_supplicant.conf是配置文件,ctrl_interface是wpa_supplicant与wpa_cli通信的接口,ssid为要连接的wifi热点名称,key_mgmt为加密方式(NONE表示不加密 O(∩_∩)O~)。
ctrl_interface=/data/misc/wifi/sockets
network={
ssid="TE-NonSignal"
key_mgmt=NONE
}
2.wpa_cli连接wpa_supplicant
/system/bin/wpa_cli -iwlan0 -p /data/misc/wifi/sockets disable_network 0
3.扫描wifi
/system/bin/wpa_cli -iwlan0 -p /data/misc/wifi/sockets scan type=only
4.使能network0
/system/bin/wpa_cli -iwlan0 -p /data/misc/wifi/sockets enable_network 0
上面都是完整的语句,我们可以直接使用/system/bin/wpa_cli -iwlan0 -p /data/misc/wifi/sockets进入wifi命令模式,如下图所示,wifi命令模式下可以直接使用scan,status等指令
成功连上了TE-NonSignal的wifi,你可能会纳闷,怎么执行enable_network 0就连上了呢?手机怎么知道network 0是什么鬼呢?上面说了有个配置文件meta_wpa_supplicant.conf,有了这个配置文件就会自动连接TE-NonSignal网络了。
上面是使用配置文件去连接网络,当然我们也可以用命令行去连接网络啦
执行scan
然后执行scan_result,下图为扫描结果
例如我们要连个公共网络OPPO-SZ,首先我们执行
add_network 如下图返回4,说明接下来要连接的network的id为4
依次执行
set_network 4 ssid "OPPO-SZ"
set_network 4 key_mgmt NONE
enable_network 4
如下图,说明成功连接上wifi了