Androidシステム情報取得の8:WIFIデバイスとWIFI信号情報取得

4353 ワード

Androidシステム情報取得の8:WIFIデバイスとWIFI信号情報取得
WifiManagerを分析するjava,WifiINfo.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("
--BSSID : "+mWifiInfo.getBSSID()); sInfo.append("
--SSID : "+mWifiInfo.getSSID()); sInfo.append("
--nIpAddress : "+ strIp); sInfo.append("
--MacAddress : "+mWifiInfo.getMacAddress()); sInfo.append("
--NetworkId : "+mWifiInfo.getNetworkId()); sInfo.append("
--LinkSpeed : "+mWifiInfo.getLinkSpeed()+"Mbps"); sInfo.append("
--Rssi : "+mWifiInfo.getRssi()); sInfo.append("
--SupplicantState : "+mWifiInfo.getSupplicantState()); sInfo.append("



"); 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("
:"+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);
        }
    }