在Android中对WiFi *** 作,Android本身提供一些有用的包,在anroid.net.wifi包下面。
是一种特殊的 Ad-hoc LAN (一种支持点对点访问的无线网络应用模式)的应用,一个无线网络至少由一个连接到有线网络的AP和若干无线工作站组成,这种配置称为一个基本服务装置。一群计算机设定相同的
BSS名称,即可自成一个group,而此BSS名称,即所谓BSSID。通常,手机WLAN中,bssid其实就是无线路由的MAC地址。
网络ID。
无线网络的安全认证模式。
SSID(Service Set Identif)用于标识无线局域网,SSID不同的无线网络是无法进行互访的。
wifi无线连接的描述,包括接入点,网络连接状态,隐藏的接入点,IP地址,连接速度,MAC地址,网络ID,信号强饥慎度等信息。这里简单介绍一下这里的方法:
用来管理我们的wifi 连接,这里已经定义好了一些类,可以供我们使用,获取WiFi网卡状态。
WIFI网卡的状态是由一系列的整形常量来表示的。
WiFi需求申请权限,在AndroidManifest.xml文件中填写。
1.打开WiFi
2.扫描WiFi信号
3.得到扫描WIFI结烂镇敬果
4.根据WIFI的名称SSID判定指定WIFI是否已经配置好,配置好则返回其networkId,用于连接。之前尝试了BSSID地址没成功,所以只能使用SSID
5.如果需要连接的WIFI没有配置好,即没有保存密码。则为指定名称ssid的WIFI添加密码信息psw,添加成功后返回给其分旅高配的networId,同于连接
6.根据步骤6配置好需要连接的WIFI密码信息后,下面通过networkId连接指定WIFI。在连接经过步骤6刚添加配置信息的WIFI信号之前需要重新执行下步骤4,得到新的配置好信息的列表。
编程时候发现当打开WIFI网络的时候系统默认就会把3G网络给关闭,估计是出于省电的原因才如此做的,但目前我需要同时使用这两个网络接口,经过一番研究找到了方法,故写成日志记录下来。
1、android网络机制。谈咐
wifi的开启关闭首先由应用程序触发的事件开始(比如用户点击开启图标),然后传入framework层,framework层启动wpa_supplicant,同时建立socket连接与wpa_supplicant进行通信,包括对wpa_supplicant的控制与得到wpa_supplicant的回传结果。若连接上了一个无线网络,则调用dhcp服务申请ip地址(或者使用启碧预先设置好的ip,不过大部分情况下是dhcp的)。若这一切正常则断开3g网络连接并关闭3g接口。
因此从这个角度分析,若要同时启动3g和wifi则必须绕过framework层,手动完成上述所有 *** 作。
因此我找到含旁纯的方法是在3g网络不断的情况下,手动启动wifi网络,连接指定ap并申请ip。
2、 *** 作步骤。
(1) 准备工作
因为牵扯到底层 *** 作,所以root必不可少,在root的情况下进入adb shell,若adb daemon没有root使用adb root命令进而使adb shell获得root权限。
原则上使用android里的终端软件也是可以的,但我没有测试。
(2)加载wifi驱动。
不加载驱动在netcfg里面根本看不到wlan0网卡,因此首先要加载驱动。
一般情况下,驱动放在/system/lib/modules下,我的驱动模块是wlan.ko。
insmod /system/lib/modules/wlan.ko。
接着删除默认路由表项
ip route del default via 172.18.206.76 dev rmnet_usb0
重新添加指向wifi的默认路由表
ip route add default via 192.168.1.140 dev wlan0
不能实现同时通信,只能相互切换,开启wifi不会关闭移动网络,只是连接上wifi后,网络通道默认走wifi通道,但是可以设置,优先走移动网络通道,有前兄adb命令:svc wifi prefer
这个是默认的状态,有wifi就是wifi优先。
svc data prefer
这个使移动数据连接比wifi优先。有移动数据开启的话御局先用移动数据,没有就用wifi。
另外开启/关闭 wifi 和慧拆袭移动数据的命令
svc data enable/disable
svc wifi enable/disable
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)