Android系统信息获取 之八:WIFI设备和WIFI信号信息获取

Android系统信息获取 之八:WIFI设备和WIFI信号信息获取



通过分析WifiManager.javaWifiINfo.java源码,我们可以发现WIFI设备信息和WIFI状态的定义。

1、Wifi设备信息中常用的信息有    

   // WifiInfo中比较常用的信息有:
   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就是接受信号强度指示

     

2、WIFI的状态定义 

   WifiManager.WIFI_STATE_DISABLING   //正在停止
   WifiManager.WIFI_STATE_DISABLED   //已停止
   WifiManager.WIFI_STATE_ENABLING   //正在打开
   WifiManager.WIFI_STATE_ENABLED    //已开启
   WifiManager.WIFI_STATE_UNKNOWN    //未知

3、获取Wifi信息的方法:

	/**
	 * 获取WifiInfo
	 * @param mContext
	 * @return
	 */
	public static WifiInfo getWifiInfo(Context mContext){
		WifiManager mWifiManager = (WifiManager)mContext.getSystemService(Context.WIFI_SERVICE);
		WifiInfo info = mWifiManager.getConnectionInfo(); 
		return info;
	}

4、获取本机WIFI设备详细信息:

	/**
	 * 获取本机WIFI设备详细信息
	 * @param mContext
	 * @return
	 */
	public static String getDetailsWifiInfo(Context mContext){
		StringBuffer sInfo = new StringBuffer();
		WifiInfo mWifiInfo = getWifiInfo(mContext);
		
	    int Ip = mWifiInfo.getIpAddress(); 
	    String strIp = "" + (Ip & 0xFF) + "." + ((Ip >> 8) & 0xFF) + "." + ((Ip >> 16) & 0xFF) + "." + ((Ip >> 24) & 0xFF); 
	    
	    sInfo.append("\n--BSSID : "+mWifiInfo.getBSSID());
	    sInfo.append("\n--SSID : "+mWifiInfo.getSSID());
	    sInfo.append("\n--nIpAddress : "+ strIp);
	    sInfo.append("\n--MacAddress : "+mWifiInfo.getMacAddress());
	    sInfo.append("\n--NetworkId : "+mWifiInfo.getNetworkId());
	    sInfo.append("\n--LinkSpeed : "+mWifiInfo.getLinkSpeed()+"Mbps");
	    sInfo.append("\n--Rssi : "+mWifiInfo.getRssi());
	    sInfo.append("\n--SupplicantState : "+mWifiInfo.getSupplicantState());
	    
		sInfo.append("\n\n\n\n");
		return sInfo.toString();
	}

5、获取周边WiFi热源的信号信息

	/**
	 * 搜索到的周边WIFI信号信息
	 * @param mContext
	 * @return
	 */
	public static String getAroundWifiDeciceInfo(Context mContext){
		StringBuffer sInfo = new StringBuffer();
		WifiManager mWifiManager = (WifiManager)mContext.getSystemService(Context.WIFI_SERVICE);
		//WifiInfo mWifiInfo = mWifiManager.getConnectionInfo(); 
		List<ScanResult> scanResults=mWifiManager.getScanResults();//搜索到的设备列表
		for (ScanResult scanResult : scanResults) {
			sInfo.append("\n设备名:"+scanResult.SSID
                  +" 信号强度:"+scanResult.level+"/n :"+mWifiManager.calculateSignalLevel(scanResult.level,4));
		}
		return sInfo.toString();
	}

其中用到了计算WIFI信号强度的方法,这个算法可以直接使用Android源码WifiManager.java中提供的方法calculateSignalLevel();

WifiManager.java部分代码如下:

    /** Anything worse than or equal to this will show 0 bars. */
    private static final int MIN_RSSI = -100;

    /** Anything better than or equal to this will show the max bars. */
    private static final int MAX_RSSI = -55;

    /**
     * Calculates the level of the signal. This should be used any time a signal
     * is being shown.
     *
     * @param rssi The power of the signal measured in RSSI.
     * @param numLevels The number of levels to consider in the calculated
     *            level.
     * @return A level of the signal, given in the range of 0 to numLevels-1
     *         (both inclusive).
     */
    public static int calculateSignalLevel(int rssi, int numLevels) {
        /* in general, numLevels is 4  */
        if (rssi <= MIN_RSSI) {
            return 0;
        } else if (rssi >= MAX_RSSI) {
            return numLevels - 1;
        } else {
            float inputRange = (MAX_RSSI - MIN_RSSI);
            float outputRange = (numLevels - 1);
            
            return (int)((float)(rssi - MIN_RSSI) * outputRange / inputRange);
        }
    }





你可能感兴趣的:(Android系统信息获取 之八:WIFI设备和WIFI信号信息获取)