Android 获取当前连接的WiFi信息

package com.lenovo.xiaoshan.test;

import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.content.Context;
import android.content.Intent;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.widget.TextView;

/**
 * 获取手机WIFI的MAC地址
 * @author 单红宇
 *
 */
public class GetmacipinfoActivity extends Activity {
	/** Called when the activity is first created. */
	private static final int REQUEST_ENABLE_BT = 3;
	private WifiManager mWifi;
	private String WifiMac;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		mWifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);

		if (!mWifi.isWifiEnabled()) {
			mWifi.setWifiEnabled(true);
		}

		WifiInfo wifiInfo = mWifi.getConnectionInfo();

		if ((WifiMac = wifiInfo.getMacAddress()) == null) {
			WifiMac = "No Wifi Device";
		}

		TextView mac = (TextView) findViewById(R.id.macView);
		mac.setTextSize(16);
		
//		查看已经连接上的WIFI信息,在Android的SDK中为我们提供了一个叫做WifiInfo的对象,这个对象可以通过WifiManager.getConnectionInfo()来获取。WifiInfo中包含了当前连接中的相关信息。
//		getBSSID()  获取BSSID属性
//		getDetailedStateOf()  获取客户端的连通性
//		getHiddenSSID()  获取SSID 是否被隐藏
//		getIpAddress()  获取IP 地址
//		getLinkSpeed()  获取连接的速度
//		getMacAddress()  获取Mac 地址
//		getRssi()  获取802.11n 网络的信号
//		getSSID()  获取SSID
//		getSupplicanState()  获取具体客户端状态的信息
		StringBuffer sb = new StringBuffer();
		sb.append("\n获取BSSID属性(所连接的WIFI设备的MAC地址):" + wifiInfo.getBSSID());
//		sb.append("getDetailedStateOf()  获取客户端的连通性:");
		sb.append("\n\n获取SSID 是否被隐藏:"+ wifiInfo.getHiddenSSID());
		sb.append("\n\n获取IP 地址:" + wifiInfo.getIpAddress());
		sb.append("\n\n获取连接的速度:" + wifiInfo.getLinkSpeed());
		sb.append("\n\n获取Mac 地址(手机本身网卡的MAC地址):" + WifiMac);
		sb.append("\n\n获取802.11n 网络的信号:" + wifiInfo.getRssi());
		sb.append("\n\n获取SSID(所连接的WIFI的网络名称):" + wifiInfo.getSSID());
		sb.append("\n\n获取具体客户端状态的信息:" + wifiInfo.getSupplicantState());
		mac.setText("WIFI网络信息:  " + sb.toString() + "\n\n蓝牙MAC:  " + btMac);
	}
}


Android 的wifi状态可以分为两大类,两者均可通过广播监听,相应的Action在WifiManager类中:

 

第一类:有无wifi源及各个状态间转变

可监听 WIFI_STATE_CHANGED_ACTION。(如下图所示,双击图片可放大)

有五种情况:

1-1 disabled

1-2 disabling

1-3 enable

1-4 enabling

1-5 unknown

 

可通过不同的Extra值,见下图(双击可放大)获得状态常量:

代码如下:

 
  
  1. if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(action)) {//在此监听wifi有无 
  2.             int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, 0); 
  3.              
  4.             switch (wifiState) { 
  5.             case WifiManager.WIFI_STATE_DISABLED: 
  6.                 updateWifiStatus(R.drawable.wifi_disable); 
  7.                 Toast.makeText(mContext, R.string.wifi_disable, 
  8.                         Toast.LENGTH_LONG).show(); 
  9.                 break
  10.             case WifiManager.WIFI_STATE_DISABLING: 
  11.                 break
  12.             case WifiManager.WIFI_STATE_ENABLED: 
  13.                 updateWifiStatus(R.drawable.wifi_enable); 
  14.                 Toast.makeText(mContext, R.string.wifi_enable, 
  15.                         Toast.LENGTH_LONG).show(); 
  16.                 break
  17.             case WifiManager.WIFI_STATE_ENABLING: 
  18.                 break
  19.             case WifiManager.WIFI_STATE_UNKNOWN: 
  20.                 break
  21.             } 
  22.         }  

 

也可通过以下代码实现:

 
  
  1. //另外一种方式 
  2.         mWifiMng = (WifiManager) mContext 
  3.                 .getSystemService(mContext.WIFI_SERVICE); 
  4.          
  5.         switch (mWifiMng.getWifiState()) { 
  6.         case WifiManager.WIFI_STATE_DISABLED: 
  7.             updateWifiStatus(R.drawable.wifi_disable); 
  8.             Toast.makeText(mContext, R.string.wifi_disable, 
  9.                     Toast.LENGTH_LONG).show(); 
  10.             break
  11.         case WifiManager.WIFI_STATE_DISABLING: 
  12.             break
  13.         case WifiManager.WIFI_STATE_ENABLED: 
  14.             updateWifiStatus(R.drawable.wifi_enable); 
  15.             Toast.makeText(mContext, R.string.wifi_enable, 
  16.                     Toast.LENGTH_LONG).show(); 
  17.             break
  18.         case WifiManager.WIFI_STATE_ENABLING: 
  19.             break
  20.         case WifiManager.WIFI_STATE_UNKNOWN: 
  21.             break
  22.         } 

 

第二类:wifi是否连接正常

 

可监听:NETWORK_STATE_CHANGED_ACTION(如下图所示,双击图片可放大)

有两种状况:

2-1连接

2-1未连接

在OnReceiver方法中,通过不同Extra值,获得连接状况,如下图,双击图片放大:

代码如下: 

 
  
  1. if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(action)) {  
  2.             Parcelable parcelableExtra = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);  
  3.             if (null != parcelableExtra) {  
  4.                 NetworkInfo networkInfo = (NetworkInfo) parcelableExtra;  
  5.                 boolean isConnected = networkInfo.isAvailable();  
  6.                 updateNetworkStatus();  
  7.             }  
  8.         } 

 


你可能感兴趣的:(Android开发)