Android获取当前WIFI所有信息

Android获取当前WIFI所有信息:

我在这里提供一个获取WIFI信息的工具类,里边包含的方法有:

1、Android创建一个创建一个WifiLock

2、Android打开WIIF,Andorid关闭WIFI

3、用路由器或者热点的WIFI名称和WIFI密码配置一个连接WIFI的Config

4、连接一个已经配置好的WIFI

5、断开指定的WIFI

6、Andorid创建WIFI热点

7、获取当前连接的路由器的IP地址

8、获取手机在当前路由器中的局域网IP地址

9、获取当前连接的WIFI的名称

10、获取本机当前Wlan Mac地址

11、扫描当前WIFI,获得手机WIFI列表


/**
 * @author YOLANDA
 * @Time 2015年3月2日 上午10:34:00
 */
public class WifiUtil {
	
	private static WifiUtil _WifiUtil;
	/**WifiManager**/
	public WifiManager mWifiManager;
	/**能够阻止wifi进入睡眠状态,使wifi一直处于活跃状态**/
	private WifiManager.WifiLock mWifilock;

	/**
	 * 初始化
	 * @author YOLANDA
	 * @param context
	 */
	private WifiUtil(Context context) {
		this.mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
	}
	
	/**
	 * 实例
	 * @author YOLANDA
	 * @param context
	 * @return
	 */
	public static WifiUtil getInstance(Context context){
		if(_WifiUtil == null){
			_WifiUtil = new WifiUtil(context);
		}
		return _WifiUtil;
	}
	/*=======================Wifi Lock========================*/

	/**
	 * 创建一个WifiLock
	 * @author YOLANDA
	 */
	public void createWifiLock() {
		this.mWifilock = this.mWifiManager.createWifiLock("WifiLock");
	}

	/**
	 * 锁定WifiLock,当下载大文件时需要锁定
	 * @author YOLANDA
	 */
	public void lockWifi() {
		this.mWifilock.acquire();
	}

	/**
	 * 解锁WifiLock
	 * @author YOLANDA
	 */
	public void unlockWifi() {
		if(mWifilock.isHeld()) { //判断是否锁定  
			mWifilock.acquire();
		}
	}

	/*=======================Wifi Info========================*/

	/**
	 * 打开Wifi
	 * @author YOLANDA
	 */
	public void openWifi() {
		if(!this.mWifiManager.isWifiEnabled()){ //当前wifi不可用
			this.mWifiManager.setWifiEnabled(true);
		}
	}

	/**
	 * 关闭Wifi
	 * @author YOLANDA
	 */
	public void closeWifi() {
		if(mWifiManager.isWifiEnabled()) {
			mWifiManager.setWifiEnabled(false);
		}
	}

	/**
	 * 配置一个wifi连接信息
	 * @author YOLANDA
	 * @param ssid
	 * @param passawrd
	 * @param passType 密码类型
	 * @param configurationType 配置类型
	 * @return
	 */
	public WifiConfiguration createWifiInfo(String ssid, String passawrd, PassType passType, ConfigurationType configurationType) {
		//配置网络信息类
		WifiConfiguration localWifiConfiguration1 = new WifiConfiguration();
		//设置配置网络属性
		localWifiConfiguration1.allowedAuthAlgorithms.clear();
		localWifiConfiguration1.allowedGroupCiphers.clear();
		localWifiConfiguration1.allowedKeyManagement.clear();
		localWifiConfiguration1.allowedPairwiseCiphers.clear();
		localWifiConfiguration1.allowedProtocols.clear();

		switch (configurationType) {
		case Wifi://Wifi连接
			localWifiConfiguration1.SSID = ("\"" + ssid + "\"");
			WifiConfiguration localWifiConfiguration2 = isExsits(ssid);
			if(localWifiConfiguration2 != null) {
				mWifiManager.removeNetwork(localWifiConfiguration2.networkId); //从列表中删除指定的网络配置网络
			}
			switch (passType) {
			case SimplePass://简单密码
				localWifiConfiguration1.hiddenSSID = true;
				localWifiConfiguration1.wepKeys[0] = ("\"" + passawrd + "\"");
				break;
			case WapPass://wap密码
				localWifiConfiguration1.preSharedKey = ("\"" + passawrd + "\"");
				localWifiConfiguration1.hiddenSSID = true;
				localWifiConfiguration1.allowedAuthAlgorithms.set(0);
				localWifiConfiguration1.allowedGroupCiphers.set(2);
				localWifiConfiguration1.allowedKeyManagement.set(1);
				localWifiConfiguration1.allowedPairwiseCiphers.set(1);
				localWifiConfiguration1.allowedGroupCiphers.set(3);
				localWifiConfiguration1.allowedPairwiseCiphers.set(2);
				break;
			default://没有密码
				localWifiConfiguration1.allowedKeyManagement.set(0);
				break;
			}
			break;
		default://AP热点
			localWifiConfiguration1.SSID = ssid;
			localWifiConfiguration1.allowedAuthAlgorithms.set(1);
			localWifiConfiguration1.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
			localWifiConfiguration1.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
			localWifiConfiguration1.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
			localWifiConfiguration1.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);
			localWifiConfiguration1.allowedKeyManagement.set(0);
			localWifiConfiguration1.wepTxKeyIndex = 0;
			switch (passType) {
			case SimplePass://简单密码
				localWifiConfiguration1.hiddenSSID = true;//网络上不广播ssid
				localWifiConfiguration1.wepKeys[0] = passawrd;
				break;
			case WapPass://wap密码
				localWifiConfiguration1.preSharedKey = passawrd;
				localWifiConfiguration1.allowedAuthAlgorithms.set(0);
				localWifiConfiguration1.allowedProtocols.set(1);
				localWifiConfiguration1.allowedProtocols.set(0);
				localWifiConfiguration1.allowedKeyManagement.set(1);
				localWifiConfiguration1.allowedPairwiseCiphers.set(2);
				localWifiConfiguration1.allowedPairwiseCiphers.set(1);
				break;
			default://没有密码
				localWifiConfiguration1.wepKeys[0] = "";
				localWifiConfiguration1.allowedKeyManagement.set(0);
				localWifiConfiguration1.wepTxKeyIndex = 0;
				break;
			}
			break;
		}
		return localWifiConfiguration1;
	}

	/**
	 * 密码类型
	 * @Project SmartControl
	 * @Class WifiUtil.java
	 * @author YOLANDA
	 * @Time 2015年3月2日 上午10:34:55
	 */
	public enum PassType{
		/**无密码**/
		NullPass,
		/**简单密码,Net上不广播SSID**/
		SimplePass,
		/**wap密码**/
		WapPass;
	}

	/**
	 * Wifi配置类型
	 * @Project SmartControl
	 * @Class WifiUtil.java
	 * @author YOLANDA
	 * @Time 2015年3月2日 上午10:35:01
	 */
	public enum ConfigurationType{
		/**Wifi类型**/
		Wifi,
		/**AP类型**/
		AP;
	}

	/**
	 * 添加一个网络,用返回的ID call {@link #enableNetwork(int)}
	 * @see #addNetworkConnect(WifiConfiguration)
	 * @author YOLANDA
	 * @param wifiConfiguration
	 * @return the ID of the newly created network description. This is used in
	 *         other operations to specified the network to be acted upon.
	 *         Returns {@code -1} on failure.
	 */
	public int addNetwork(WifiConfiguration wifiConfiguration) {
		return mWifiManager.addNetwork(wifiConfiguration);
	}

	/**
	 * 连接指定添加的网络
	 * 用 {@link #addNetwork(WifiConfiguration)} 返回的ID
	 * @author YOLANDA
	 * @param networkId
	 */
	public boolean enableNetwork(int networkId, boolean disableOthers) {
		return mWifiManager.enableNetwork(networkId, disableOthers);
	}

	/**
	 * 添加指定网络并连接
	 * @see #addNetwork(WifiConfiguration)
	 * @see #enableNetwork(int)
	 * @author YOLANDA
	 * @param wifiConfiguration
	 * @return
	 */
	public boolean addNetworkConnect(WifiConfiguration wifiConfiguration, boolean disableOthers) {
		int i = mWifiManager.addNetwork(wifiConfiguration);
		return enableNetwork(i, disableOthers);
	}

	/**
	 * 断开指定id的wifi
	 * @author YOLANDA
	 * @param paramInt WifiConfiguration.networkId
	 */
	public void disconnectWifi(WifiConfiguration wifiConfiguration) {
		if(wifiConfiguration != null)
			disconnectWifi(wifiConfiguration.networkId);
	}

	/**
	 * 断开指定id的wifi
	 * @author YOLANDA
	 * @param paramInt WifiConfiguration.networkId
	 */
	public void disconnectWifi(int paramInt) {
		this.mWifiManager.disableNetwork(paramInt);
	}

	/**
	 * 是否存在某个网络信息
	 * @param str Wifi名称:WifiConfiguration.SSID 去掉两边的"\"
	 * @return
	 */
	private WifiConfiguration isExsits(String str) {
		Iterator<WifiConfiguration> localIterator = this.mWifiManager.getConfiguredNetworks().iterator();
		WifiConfiguration wifiConfiguration;
		do {
			if(!localIterator.hasNext()) {
				return null;
			}
			wifiConfiguration = localIterator.next();
		}while(!wifiConfiguration.SSID.equals("\"" + str + "\""));
		return wifiConfiguration;
	}

	/*=======================Wifi 热点========================*/

	/**
	 * 根据wifi信息创建或关闭一个热点 
	 * @author YOLANDA
	 * @param paramWifiConfiguration
	 * @param paramBoolean
	 */
	public void operationWifiAP(WifiConfiguration wifiConfiguration, Boolean isCreateOrClose) {
		try {
			Class<?> localClass = this.mWifiManager.getClass();
			Class<?>[] arrayOfClass = new Class[2];
			arrayOfClass[0] = WifiConfiguration.class;
			arrayOfClass[1] = Boolean.TYPE;
			Method localMethod = localClass.getMethod("setWifiApEnabled", arrayOfClass);
			WifiManager wifiManager = this.mWifiManager;
			Object[] arrayOfObject = new Object[2];
			arrayOfObject[0] = wifiConfiguration;
			arrayOfObject[1] = isCreateOrClose;
			localMethod.invoke(wifiManager, arrayOfObject);
			return;
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 获取热点名
	 * @author YOLANDA
	 * @return
	 */
	public String getApSSID() {
		try {
			Method localMethod = this.mWifiManager.getClass().getDeclaredMethod("getWifiApConfiguration", new Class[0]);
			if (localMethod == null) return null;
			Object localObject1 = localMethod.invoke(this.mWifiManager,new Object[0]);
			if (localObject1 == null) return null;
			WifiConfiguration localWifiConfiguration = (WifiConfiguration) localObject1;
			if (localWifiConfiguration.SSID != null) return localWifiConfiguration.SSID;
			Field localField1 = WifiConfiguration.class	.getDeclaredField("mWifiApProfile");
			if (localField1 == null) return null;
			localField1.setAccessible(true);
			Object localObject2 = localField1.get(localWifiConfiguration);
			localField1.setAccessible(false);
			if (localObject2 == null)  return null;
			Field localField2 = localObject2.getClass().getDeclaredField("SSID");
			localField2.setAccessible(true);
			Object localObject3 = localField2.get(localObject2);
			if (localObject3 == null) return null;
			localField2.setAccessible(false);
			String str = (String) localObject3;
			return str;
		} catch (Exception localException) {
		}
		return null;
	}

	/**
	 * 获取热点创建状态
	 * @author YOLANDA
	 * @return
	 */
	public int getWifiApState() {
		try {
			int i = ((Integer) this.mWifiManager.getClass()
					.getMethod("getWifiApState", new Class[0])
					.invoke(this.mWifiManager, new Object[0])).intValue();
			return i;
		} catch (Exception localException) {
		}
		return 4;// 未知wifi网卡状态
	}

	/*=======================Current Wifi Info========================*/

	/**
	 * 获取当前已经连接wifi信息
	 * @author YOLANDA
	 * @return
	 */
	public WifiInfo getCurrentWifiInfo() {
		return this.mWifiManager.getConnectionInfo();
	} 

	/**
	 * 获取当前已经连接wifi MAC 地址
	 * @author YOLANDA
	 * @return
	 */
	public String getCurrentBSSID() {
		WifiInfo info = getCurrentWifiInfo();
		if(info != null){
			return info.getBSSID();
		}
		return null;
	}

	/**
	 * 获取当前已经连接Wifi名称
	 * @author YOLANDA
	 * @return
	 */
	public String getCurrentWifiName() {
		WifiInfo info = getCurrentWifiInfo();
		if(info != null){
			String s = info.getSSID();
			//去掉开头和结尾的",留下中间的
			if (!TextUtils.isEmpty(s) && (s.length() > 2) && (s.charAt(0) == '"') && (s.charAt(s.length() - 1) == '"')) {
				return s.substring(1, s.length() - 1);
			}
		}
		return null;
	}
	
	/**
	 * 获取当前已经连接网络在本机的id
	 * @author YOLANDA
	 * @return 没有则返回0
	 */
	public int getCurrentNetworkId() {
		WifiInfo info = getCurrentWifiInfo();
		if(info != null){
			return info.getNetworkId();
		}
		return 0;
	}

	/**
	 * 本机物理(Mac)地址 
	 * @author YOLANDA
	 * @return
	 */
	public String getMyMacAddress() {
		WifiInfo info = getCurrentWifiInfo();
		if(info != null){
			return info.getMacAddress();
		}
		return null;
	}
	
	/**
	 * 转化为真正的IP
	 * @author YOLANDA
	 * @param ipAddress
	 * @return
	 */
	private String intToIp(int ipAddress)  {
		return ((ipAddress & 0xff) + "." + (ipAddress>>8 & 0xff) + "." +(ipAddress>>16 & 0xff) + "." + (ipAddress>>24 & 0xff));
	}
	
	/**
	 * 获取当前本机ip地址
	 * @author YOLANDA
	 * @return
	 */
	public String getMyIPAddress() {
		WifiInfo info = getCurrentWifiInfo();
		if(info != null){
			return intToIp(info.getIpAddress());
		}
		return null;
	}

	/*=======================Outer Wifi Info List========================*/

	/**
	 * 开始搜索wifi
	 * @author YOLANDA
	 */
	public void startScan() {
		this.mWifiManager.startScan();
	}

	/**
	 * 得到扫描到的网络列表
	 * @author YOLANDA
	 * @return
	 */
	public List<ScanResult> getWifiList() {
		List<ScanResult> scanResults = this.mWifiManager.getScanResults();
		return scanResults;
	}

	/**
	 * 查看扫描结果
	 * @author YOLANDA
	 * @return
	 */
	public StringBuilder lookUpScan(List<ScanResult> scanResults) {
		StringBuilder stringBuilder = new StringBuilder();
		for (int i = 0; i < scanResults.size(); i++){
			stringBuilder.append("Index_" + Integer.valueOf(i + 1).toString() + ":"); 
			//将ScanResult信息转换成一个字符串包  
			//其中把包括:BSSID、SSID、capabilities、frequency、level
			stringBuilder.append((scanResults.get(i)).toString());
			stringBuilder.append("\n");
		}
		return stringBuilder;
	}

	/**
	 * 拿到最后一次连接成功的路由器的地址
	 * @author YOLANDA
	 * @return
	 */
	public String getLastSucceedAddress() {
		DhcpInfo myDhcpInfo = mWifiManager.getDhcpInfo();
		if (myDhcpInfo == null) {
			return "255.255.255.255";
		}
		int broadcast = myDhcpInfo.ipAddress & myDhcpInfo.netmask | myDhcpInfo.netmask ^ 0xFFFFFFFF;
		byte[] quads = new byte[4];
		for (int k = 0; k < 4; k++) {
			quads[k] = ((byte) (broadcast >> k * 8 & 0xFF));
		}
		try {
			return InetAddress.getByAddress(quads).getHostAddress();
		} catch (Exception e) {
			return "255.255.255.255";
		}
	}
}


你可能感兴趣的:(mac)