您的位置:首页 > 理论基础 > 计算机网络

android4.0 WIFI实现网络连接

2016-05-10 16:04 411 查看
目录[-]

1.注册wifi的广播接收器:
2.构造一个wifi 的工具类:
3.打开wifi并扫描附近热点:
4.连接指定的wifi名称[SSID]:
5.获取wifi连接成功后的ip信息:
6.ping命令测试wifi的连通:
7.添加网络控制权限以及wifi的权限:

android4.0上打开wifi后,自动扫描附近所有的wifi热点,连接指定的wifi名称和密码,DHCP动态获取IP后,最后使用Ping命令对连网进行测试。


1.注册wifi的广播接收器:

监听WifiManager.WIFI_STATE_CHANGED_ACTION消息,并实时处理wifi状态的变化。

wifi的消息一共有五种:

WifiManager.WIFI_STATE_DISABLED: //wifi不可用

WifiManager.WIFI_STATE_DISABLING://wifi 正在关闭或者断开

WifiManager.WIFI_STATE_ENABLED://wifi可用

WifiManager.WIFI_STATE_ENABLING://wifi正在打开或者连接

WifiManager.WIFI_STATE_UNKNOWN://未知消息

仅在wifi状态为WIFI_STATE_ENABLED的时候,才表示wifi已经连接成功。因此我们在此可以进行连通测试,若想成功获取ip,最好等待3s再去获取ip信息。在测试过程中,发现wifi连网成功后,立马去进行ping命令测试的话,其实际的ip信息还没有来得及设置。

?


2.构造一个wifi 的工具类:

提供打开wifi,关闭wifi,扫描WIFI热点,连接wifi热点,获取IP信息,以及一些wifi热点信息的获取。

?


3.打开wifi并扫描附近热点:

wifi打开后,可以通过WifiManager进行wifi热点的扫描。

?


4.连接指定的wifi名称[SSID]:

TP-LINK_liusl,密码为:liusl2222

WIFI的连接类型分为:

1.没有密码:WIFICIPHER_NOPASS

2.用wep加密:WIFICIPHER_WEP

3.用wpa加密:WIFICIPHER_WPA

?


5.获取wifi连接成功后的ip信息:

?


6.ping命令测试wifi的连通:

使用Root权限,通过JNI封装成一个系统库,调用exe command进行ping -c 4 -w 100 192.168.1.1测试。代码将不详细贴出。

执行结果:

I/SystemTestingJNI( 1836): executeCommand ret=0, result=PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.

I/SystemTestingJNI( 1836): 64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=6.54 ms

I/SystemTestingJNI( 1836): 64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.316 ms

I/SystemTestingJNI( 1836): 64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=0.194 ms

I/SystemTestingJNI( 1836): 64 bytes from 192.168.1.1: icmp_seq=4 ttl=64 time=0.255 ms

I/SystemTestingJNI( 1836):

I/SystemTestingJNI( 1836): --- 192.168.1.1 ping statistics ---

I/SystemTestingJNI( 1836): 4 packets transmitted, 4 received, 0% packet loss, time 3001ms

I/SystemTestingJNI( 1836): rtt min/avg/max/mdev = 0.194/1.826/6.542/2.723 ms

--还有一种方法,使用Runtime去ping,但是需要注意权限问题,以及输入输出流得自己处理。 exec执行时阻塞、非阻塞,返回结果问题

Process p= Runtime.getRuntime().exec(cmd);//String cmd


7.添加网络控制权限以及wifi的权限:

<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />

<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息