在Android中操作wifi
WiFiManager 类
WifiManager是android提供的一个用于管理wifi的类,通过这个类可以对wifi进行操作
WifiManager提供的WiFi状态表
WifiManager.WIFI_STATE_ENABING Wifi正在打开
WifiManager.WIFI_STATE_ENABLED Wifi已打开
WifiManager.WIFI_STATE_DISABLED Wifi已关闭
WifiManager.WIFI_STATE_DISABLING Wifi正在关闭
WifiManager.WIFI_STATE_UNKNOWN Wifi状态未知
打开/关闭WiFi
①权限
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/> //允许应用程序改变网络状态
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> //允许应用程序改变wifi状态
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> //允许应用程序获取网络状态
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> //允许应用程序获取wifi状态
②获取wifimanager对象
WiFiManager wifiManager = (WifiManager) MainActivity.this.getApplicationContext().getSystemService(Service.WIFI_SERVICE);
//context为当前activity对象
③打开wifi
wifiManager.setWifiEnabled(true);
④关闭wifi
wifiManager.setWiFiEnabled(false);
⑤获取当前wifi状态
wifiManager.getWiFiState();
//返回值为第一张表中的返回值,返回值类型为int值
WifiInfo 类
wifiinfo提供了更多的关于当前wifi状态的方法,如ssid,网络连接速度等
方法 意义
getBSSID() 获取BSSID
getHiddenSSID() 获取SSID是否被隐藏
getIPAddress() 获取整数形式的IP地址
getNetworkId() 获得网络ID
getLinkSpeed() 获取链接速度,单位Mbps
getMacAddress() 获取物理地址
getSSid() 获取SSID
getSupplicanState() 返回具体客户端状态的信息
综上,我们可以获得wifi的很多信息,但是其中IP地址为整数形式,而我们平常使用的为点分十进制IP地址,于是,我们还需要调用一个方法来讲IP地址进行转换
//将整数值IP转化为点分IP
private String intoIP(int ipaddress) {
return (ipaddress & 0xFF)+"."+((ipaddress>>8)&0xFF)+"."+((ipaddress>>16)&0xFF)+"."+((ipaddress>>24)&0xFF);
}
附 Wifi状态小案例代码
layout代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical"
>
<