Andorid中wifi的学习

<span style="background-color: rgb(255, 255, 255); font-family: Arial, Helvetica, sans-serif;">Android提供了android.net.wifi包供我们操作Wifi。首先介绍一下包里面的几个类:</span>

WifiManager:提供了管理Wifi连接的大部分API

ScanResult:已检测出的接入点(包括接入点的地址、名称、身份认证、频率、信号强度)

WiFiConfiguration:Wifi连接的网络配置

WifiInfo:已连接上的无线连接服务(包括接入点、网络连接状态、隐藏的接入点、IP地址等等)

WifiManager.WifiLock:允许应用程序一直使用Wifi无线网络,使网络一直保持活动状态,例如在下载大文件。

Wifi的使用:

<span style="white-space:pre">	</span>WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);<pre name="code" class="java"><span style="white-space:pre">	</span>if(!this.mWifiManager.isWifiEnabled()){ //当前wifi不可用
<span style="white-space:pre">		</span>this.mWifiManager.setWifiEnabled(true);
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>wifiManager.scanResults();
 <span style="white-space:pre">	List<ScanResult> </span> list = wifiManager.getScanResults();
 
获取检测到的Wifi信息,选择其中一wifi进行连接。 

	int i = wifiManager.addNetwork(paramWifiConfiguration);
	wifiManager.enableNetwork(i, true);

获取已连接Wifi的详细信息。

<span style="white-space:pre">	</span>WifiInfo info = ((WifiManager)getSystemService(WIFI_SERVICE)).getConnectionInfo(); 
        mIconWifi.setImageLevel(Math.abs(info.getRssi())); 
         
        /*
        info.getBSSID();      获取BSSID地址。
        info.getSSID();       获取SSID地址。  需要连接网络的ID
        info.getIpAddress();  获取IP地址。4字节Int, XXX.XXX.XXX.XXX 每个XXX为一个字节
        info.getMacAddress(); 获取MAC地址。
        info.getNetworkId();  获取网络ID。
        info.getLinkSpeed();  获取连接速度,可以让用户获知这一信息。
        info.getRssi();       获取RSSI,RSSI就是接受信号强度指示
         */ 
         
        int Ip = info.getIpAddress(); 
        String strIp = "" + (Ip & 0xFF) + "." + ((Ip >> 8) & 0xFF) + "." + ((Ip >> 16) & 0xFF) + "." + ((Ip >> 24) & 0xFF); 
         
        mLabelWifi.setText("BSSID : " + info.getBSSID() + "\nSSID : " + info.getSSID() +  
                "\nIpAddress : " + strIp + "\nMacAddress : " + info.getMacAddress() + 
                "\nNetworkId : " + info.getNetworkId() + "\nLinkSpeed : " + info.getLinkSpeed() + "Mbps" +  
                "\nRssi : " + info.getRssi()); 
        info.getIpAddress(); 

设置Wifi AP热点:

首先需要开启Wifi热点。WifiManager.setWifiApEnabled是隐藏方法,不对外开发,所以需要应用反射技术来实现。

<span style="white-space:pre">		</span>Method setupMethod = wifiManager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, boolean.class);

		WifiConfiguration netConfig = new WifiConfiguration();
		// 设置wifi热点名称
		netConfig.SSID = name;

		netConfig.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
		netConfig.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
		netConfig.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
		netConfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
		netConfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
		netConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
		netConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);

		if (password != null) {
			if (password.length() < 8) {
				throw new Exception("the length of wifi password must be 8 or longer");
			}
			// 设置wifi热点密码
			netConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
			netConfig.preSharedKey = password;
		}

		setupMethod.invoke(wifiManager, netConfig, true);
开启并设置wifi热点,WifiConfiguration一些参数的说明:

SSID:唯一标识wifi

preSharedKey:WIfi密码

hiddenSSID:是否隐藏SSID,确保Wifi安全

allowedAuthAlgorithms:wifi用户认证

allowedGroupCiphers:加密方式,组加密,默认值"WEP40", "WEP104", "TKIP", "CCMP"

allowedPairwiseCiphers:加密方式,成对加密,默认值"TKIP", "CCMP" 

allowedKeyManagement:安全方式,"WPA_PSK", "WPA_EAP", "IEEE8021X", "WPA2_PSK"

status:状态

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值