Androidシステム情報取得の8:WIFIデバイスとWIFI信号情報取得
4353 ワード
Androidシステム情報取得の8:WIFIデバイスとWIFI信号情報取得
WifiManagerを分析するjava,WifiINfo.JAvaソースコードは、WIFIデバイス情報とWIFI状態の定義を見つけることができます.
1、Wifi設備情報によく使われる情報は
2、WIFIの状態定義
3、Wifi情報を取得する方法:
4、本機WIFI設備の詳細を取得する:
5、周辺WiFi熱源の信号情報を取得する
その中でWIFI信号強度を計算する方法が用いられ、このアルゴリズムはAndroidソースWifiManagerを直接使用することができる.JAvaで提供される方法calculateSignalLevel()
WifiManager.JAvaの一部のコードは以下の通りです.
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);
}
}