addNetwork(WifiConfiguration config) 添加一个config描述的WIFI网络,默认情况下,这个WIFI网络是DISABLE状态的。 calculateSignalLevel(int rssi , int numLevels) 计算信号的等级 compareSignalLevel(int rssiA, int rssiB) 对比网络A和网络B的信号强度 createWifiLock(int lockType, String tag) 创建一个WIFI 锁,锁定当前的WIFI连接 disableNetwork(int netId) 让一个网络连接失效 disconnect() 断开当前的WIFI连接 enableNetwork(int netId, Boolean disableOthers) 连接netId所指的WIFI网络,并是其他的网络都被禁用 getConfiguredNetworks() 获取网络连接的状态 getConnectionInfo() 获取当前连接的信息 getDhcpInfo() 获取DHCP 的信息 getScanResulats() 获取扫描测试的结果 getWifiState() 获取当前WIFI设备的状态 isWifiEnabled() 判断WIFI设备是否打开 pingSupplicant() ping操作,和PC的ping操作相同作用 ressociate() 重新连接WIFI网络,即使该网络是已经被连接上的 reconnect() 重新连接一个未连接上的WIFI网络 removeNetwork() 移除某一个网络 saveConfiguration() 保留一个配置信息 setWifiEnabled() 让一个连接有效 startScan() 开始扫描 updateNetwork(WifiConfiguration config) 更新一个网络连接
WIFI_STATE_DISABLED //WIFI网卡不可用 WIFI_STATE_DISABLING //WIFI网卡正在关闭 WIFI_STATE_ENABLED //WIFI网卡可用 WIFI_STATE_ENABLING //WIFI网卡正在打开 WIFI_STATE_UNKNOWN //WIFI网卡状态不可知
getBSSID() 获取BSSID属性 getDetailedStateOf() 获取客户端的连通性 getHiddenSSID() 获取SSID 是否被隐藏 getIpAddress() 获取IP 地址 getLinkSpeed() 获取连接的速度 getMacAddress() 获取Mac 地址 getRssi() 获取802.11n 网络的信号 getSSID() 获取SSID getSupplicanState() 获取具体客户端状态的信息
WifiManager wifiManager=(WifiManager) getSystemService(WIFI_SERVICE);
WifiInfo wifiInfo=wifiManager.getConnectionInfo(); //当前wifi连接信息 List<ScanResult> scanResults=wifiManager.getScanResults();//搜索到的设备列表 for (ScanResult scanResult : scanResults) { tv.append("\n设备名:"+scanResult.SSID +" 信号强度:"+scanResult.level+"/n :"+wifiManager.calculateSignalLevel(scanResult.level,4)); }
/** * 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) { if (rssi <= MIN_RSSI) { return 0; } else if (rssi >= MAX_RSSI) { return numLevels - 1; } else { int partitionSize = (MAX_RSSI - MIN_RSSI) / (numLevels - 1); return (rssi - MIN_RSSI) / partitionSize; } }
<!-- 以下是使用wifi访问网络所需的权限 --> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
private String getConnectWifiSsid(){ WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE); WifiInfo wifiInfo = wifiManager.getConnectionInfo(); Log.d("wifiInfo", wifiInfo.toString()); Log.d("SSID",wifiInfo.getSSID()); return wifiInfo.getSSID(); }如果不是想获取当前连接,而是想获取WIFI设置中的连接, 可以使用 WifiManager.getConfiguredNetworks
public class MyWifi extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); TextView infoText = (TextView) this.findViewById(R.id.info); infoText.setText(getInfo()); } private String getInfo() { WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); WifiInfo info = wifi.getConnectionInfo(); String maxText = info.getMacAddress(); String ipText = intToIp(info.getIpAddress()); String status = ""; if (wifi.getWifiState() == WifiManager.WIFI_STATE_ENABLED) { status = "WIFI_STATE_ENABLED"; } String ssid = info.getSSID(); int networkID = info.getNetworkId(); int speed = info.getLinkSpeed(); return "mac:" + maxText + "\n\r" + "ip:" + ipText + "\n\r" + "wifi status :" + status + "\n\r" + "ssid :" + ssid + "\n\r" + "net work id :" + networkID + "\n\r" + "connection speed:" + speed + "\n\r" ; } private String intToIp(int ip) { return (ip & 0xFF) + "." + ((ip >> 8) & 0xFF) + "." + ((ip >> 16) & 0xFF) + "." + ((ip >> 24) & 0xFF); } }
一、获取wifi属性
获得Android系统相关的属性,通过Manager来获得对对象的操作服务。WiFi相关的操作中需要用到两个Manager:WifiManager和ConnectivityManage:
获得服务后,即可得到对象进而获得相关属性:
要获得wifi相关的网络信息,必须设定网络类型参数:ConnectivityManager.TYPE_WIFI.
二、获取周围WiFi热点
wifiManager提供了一个方法getScanResults()来获得周围的wifi信息,其返回的是一组ScanResult对象,存放在list当中,每个ScanResult对象封装了一个wifi热点相关信息,通过ScanResult对象的属性即可获取到,最常用的两个属性为wifi名称(SSID)和信号强度(level):