Android 获取wifi状态 Wifi控制 主动连接wifi

来源:互联网 发布:柬埔寨网络博客合法吗 编辑:程序博客网 时间:2024/05/17 04:38

1.获取wifi状态第一步肯定是要添加权限的,不然会闪退。

权限:<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>


public static boolean isWiFiActive(Context context) 
{    
wifimanager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);//得到wifi管理器对象

return wifimanager.isWifiEnabled();//返回wifi状态


2.打开wifi,因为打开wifi是去改变Wifi的状态,所以打开wifi的权限和获取WiFi状态的权限是不一样的,也要记得加上去。

权限:<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>

/**
 * 打开或关闭wifi
 */ 
public static void isOpenWifi(Context context,boolean isOpen)
{
wifimanager  = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);//得到wifi管理器对象
wifimanager.setWifiEnabled(isOpen); //打开或关闭
}


3.当我们知道wifi的账号和密码的时候,如何用代码去连接这个wifi。先上代码。

/**
* 添加并连接wifi
* @param context
 * @param wifiname
* @param pwd
*/
public static void AddWifiConfig(Context context,String wifiname , String pwd) {//第二个参数是账号名称,也就是我们WiFi列表里所看到的名字
wifimanager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE);//得到wifi管理器对象
int wifiId = -1;//自己定义的数值,判断用
WifiConfiguration wifiCong = new WifiConfiguration();//这个类是我们构造wifi对象使用的,具体可以百度
wifiCong.SSID = "\"" + wifiname + "\"";// \"转义字符,代表"//为成员变量赋值
wifiCong.preSharedKey = "\"" + pwd + "\"";// WPA-PSK密码
wifiCong.hiddenSSID = false;
wifiCong.status = WifiConfiguration.Status.ENABLED;
wifiId = wifimanager.addNetwork(wifiCong);// 将配置好的特定WIFI密码信息添加,添加完成后默认是不激活状态,成功返回ID,否则为-1
if ( wifiId!=-1 )
{
//添加成功
}else
{
//添加失败
}
boolean isConected =  wifimanager.enableNetwork(wifiId, true);  // 连接配置好的指定ID的网络 true连接成功
if ( isConected )
{
//连接成功
WifiInfo info = wifimanager.getConnectionInfo();
}else
{
//连接失败
}
}

这样需要连接的时候调用就可以了,只要wifi账号密码没出错就可以连接上。


3.获取周围的wifi,对比附近是否有自己所想要的wifi,有返回true,没有false

/**
* 获取附近的wifi,对比附近是否有这个wifi
* @param context
* @param wifname
*/
public static boolean getAroundWifi(Context context,String wifname)
{
List<ScanResult> wifilist = new ArrayList<ScanResult>();
wifilist.clear();
wifimanager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE);
List<ScanResult> list = wifimanager.getScanResults();

for (ScanResult scanResult : list) {//这一步是为了过滤重复的wifi,因为wifi扫描过程中会把同一个wifi添加多遍。
if (!TextUtils.isEmpty(scanResult.SSID) && !containName(wifilist,scanResult.SSID))
{
wifilist.add(scanResult);
}
}
list.clear();
for (ScanResult Result : wifilist) {
if(wifname.equals(Result.SSID))
{
return true;
}
}
return false;
}

/**
* 判断一个扫描结果中,是否包含了某个名称的WIFI
* @param sr
* 扫描结果
* @param name
* 要查询的名称
* @return 返回true表示包含了该名称的WIFI,返回false表示不包含
*/
public static boolean containName(List<ScanResult> sr, String name)
{
for (ScanResult result : sr)
{
if (result.SSID.equals(name))
return true;
}
return false;
}