Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android系統信息獲取 之十四:獲取WIFI熱點相關信息

Android系統信息獲取 之十四:獲取WIFI熱點相關信息

編輯:關於Android編程

Android系統信息獲取 之十四:獲取WIFI熱點相關信息


當在Android設備終端上使用Wifi熱點的時候,需要獲知Wifi熱點的運行狀態,熱點是否打開,連接到該WIFI熱點的設備數量,以及連接設備的具體IP和MAC地址。

使用re文件管理器去"/proc/net/arp",打開,發現連接上熱點的設備信息都在這裡了,包括mac ip等。

鑒於此,我們可以在代碼中打開該文件,並獲取WIFI熱點的信息。


獲取WIFI熱點狀態的方法getWifiApState()和判斷熱點是否可用的方法isApEnabled(),在Android源碼WifiManager.java中已經實現,但是它們是Hide方法,在SDK層面是不能訪問的,如要訪問需要用到java反射的機制。具體代碼實現如下:


其中定義WIFI AP的幾個狀態

    public static final int WIFI_AP_STATE_DISABLING = 10;  
    public static final int WIFI_AP_STATE_DISABLED = 11;  
    public static final int WIFI_AP_STATE_ENABLING = 12;  
    public static final int WIFI_AP_STATE_ENABLED = 13;  
    public static final int WIFI_AP_STATE_FAILED = 14; 

對應於WifiMangaer.java中對這幾個狀態的定義。


獲取WIFI熱點的狀態:

	public int getWifiApState(Context mContext) {  
		WifiManager wifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE); 
        try {  
            Method method = wifiManager.getClass().getMethod("getWifiApState");  
            int i = (Integer) method.invoke(wifiManager);  
            Log.i(TAG,"wifi state:  " + i);  
            return i;  
        } catch (Exception e) {  
            Log.e(TAG,"Cannot get WiFi AP state" + e);  
            return WIFI_AP_STATE_FAILED;  
        }  
    }  

判斷Wifi熱點是否可用:

	public boolean isApEnabled(Context mContext) {  
        int state = getWifiApState(mContext);  
        return WIFI_AP_STATE_ENABLING == state || WIFI_AP_STATE_ENABLED == state;  
    } 


獲取鏈接到當前熱點的設備IP:

	private ArrayList getConnectedHotIP() {
		ArrayList connectedIP = new ArrayList();
		try {
			BufferedReader br = new BufferedReader(new FileReader(
					"/proc/net/arp"));
			String line;
			while ((line = br.readLine()) != null) {
				String[] splitted = line.split(" +");
				if (splitted != null && splitted.length >= 4) {
					String ip = splitted[0];
					connectedIP.add(ip);
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return connectedIP;
	}
	//輸出鏈接到當前設備的IP地址
	public void printHotIp() {

		ArrayList connectedIP = getConnectedHotIP();
		StringBuilder resultList = new StringBuilder();
		for (String ip : connectedIP) {
			resultList.append(ip);
			resultList.append("\n");
		}
		System.out.print(resultList);
		Log.d(TAG,"---->>heww resultList="+resultList);
	}

當然在應用中要添加訪問WIFI設備的權限:

	

否則將會提示如下錯誤:

Cannot get WiFi AP state


----------------------------------

歡迎浏覽、技術交流 請尊重勞動成果 轉載請注明出處,謝謝!

http://blog.csdn.net/netwalk/article/details/23183501



  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved