一、获取wifi列表

获取wifi列表需要用wifiManager.startScan();进行扫描,扫描结果的列表使用List 保存

扫描步骤:

wifiManager.startScan(); //开启扫描

scanResultList = wifiManager.getScanResults(); // 扫描返回结果列表

注意:因为startScan是异步的,如果一直扫描,scanResultList中有可能会有些热点名称是重复的,其实是同一个热点,这时需要进行下过滤。

下面附上ScanResult的字段说明:

BSSID:fc:e3:3c:4e:f0:34

capabilities:[WPA-PSK-TKIP][ESS]   加密方案

frequency:2412

level:-48 ->信号的强弱标志(单位dBm分贝毫伏)

SSID:ChinaNet-kgdp ->我们平时输入的wifi名称

timestamp:238673772811

describeContents():0

level根据数值可以分为5个等级的信号强弱:

Level>-50           信号最强4格

-50

-65

-75

-90

二、连接WIFI

连接wifi分两种,已经配置过的wifi以及未配置过的wifi

1、连接已经配置过的wifi

检查是否已经配置过该wifi,通过WifiManager获取已经配置的wifi列表

List existingConfigs = wifiManager.getConfiguredNetworks();

传入要连接的wifi的SSID(即wifi名称,匹配得到则不用输入密码即可连接,匹配不到则要输入密码才能连接)

这里需要注意的是:WifiConfiguration里封装的wifi的SSID是包含双引号的,而ScanResult的SSID是不包含双引号的,这里进行遍历比较时需要注意!对于连接已经配置过的wifi,这里遍历的结果返回一个WifiConfiguration的对象,拿来实现连接;另外这里的wifiManager已经存在了要连接的wifi的networkId,所以不用重新调用wifiManager的addNetwork方法,我们曾经出现过一个问题就是测试用久之后wifi连接会变得很慢,原因就是我们一每次连接都调用了addNetwork方法,引起缓存过多,所以这里切记不能乱用addNetwork。

下面来看看代码实现:

/**

* 已有配置链接

*

* @param wf

* @return

*/

public boolean Connect(WifiConfiguration wf) {

if (!this.OpenWifi()) {

return false;

}

// 状态变成WIFI_STATE_ENABLED的时候才能执行下面的语句,即当状态为WIFI_STATE_ENABLING时,让程序在while里面跑

while (wifiManager.getWifiState() == WifiManager.WIFI_STATE_ENABLING) {

try {

// 为了避免程序一直while循环,让它睡个100毫秒在检测……

Thread.currentThread();

Thread.sleep(100);

} catch (InterruptedException ie) {

}

}

boolean bRet = wifiManager.enableNetwork(wf.networkId, true);

wifiManager.saveConfiguration();

return bRet;

}

2、连接未经配置过的wifi

输入密码,根据密码创建一个配置信息类

WifiConfiguration wifiConfig = this.CreateWifiInfo(SSID, Password, Type);

注:这里的type是wifi的加密类型,加密类型查看源码有

/**

* 加密类型

*

* @author Administrator

*

*/

public enum WifiCipherType {

WIFICIPHER_WEP, WIFICIPHER_WPA, WIFICIPHER_NOPASS, WIFICIPHER_INVALID

}

一般使用WIFICIPHER_WPA这种加密方式,还有web以及无密码的方式。

然后调用addNetwork把配置信息加入WifiManager(这里返回networkId ),加入后默认是DISABLED(即断开状态的),还要再调用WifiManager.enableNetwork(int netId, boolean disableOthers)去启用,这里传入参数addNetwork方法返回的networkId ,就能启动连接了,布尔值传入true,关闭别的网络,代码:

/**

* 无配置记录链接方式

*

* @param SSID

* @param Password

* @param Type

* @return true or false

*/

public boolean Connect(String SSID, String Password, WifiCipherType Type) {

if (!this.OpenWifi()) {

return false;

}

// 状态变成WIFI_STATE_ENABLED的时候才能执行下面的语句

while (wifiManager.getWifiState() == WifiManager.WIFI_STATE_ENABLING) {

try {

// 为了避免程序一直while循环,让它睡个100毫秒在检测……

Thread.currentThread();

Thread.sleep(100);

} catch (InterruptedException ie) {

}

}

WifiConfiguration wifiConfig = this.CreateWifiInfo(SSID, Password, Type);

int netID = wifiManager.addNetwork(wifiConfig);

boolean bRet = wifiManager.enableNetwork(netID, true);

wifiManager.saveConfiguration();

return bRet;

}

注意点:

1、首先权限,权限请参考上一篇博客:《一、Android打开WIFI》

2、个别手机如果获取不到wifi列表很可能就是权限有问题,请检查权限。

3、无论是获取wifi列表还是连接wifi, 都要先打开wifi。

好了,获取wifi列表与wifi连接就说到这里,下篇博客我们再说下《Android开启wifi热点》

java 获取wifi_获取wifi列表并连接wifi相关推荐

  1. Android7.0+ 获取WiFi列表以及连接WiFi

    获取WiFi列表并连接 这段时间项目中涉及到需要获取WiFi列表以及连接,在这里记录下 其中就有一个坑,在Android7.0以上还需要打开定位(也就是手机中"位置信息") Wif ...

  2. android 获得wifi列表并连接wifi

    1.引包 implementation 'com.thanosfisherman.wifiutils:wifiutils:1.6.4' implementation 'com.thanosfisher ...

  3. Qt获取wifi列表,连接wifi后获取IP地址

    环境win7+qt5.13+MinGW32,台式机 直接上步骤了,网上看到的略显啰嗦,就是这么简单直接: 1.头文件 #include "windows.h",#include & ...

  4. android 获取wifi的加密类型,Android WIFI开发:获取wifi列表,连接指定wifi,获取wifi加密方式,监听wifi网络变化等...

    下面是 Android 开发中 WiFi 的常用配置,如:获取当前 WiFi ,扫描 WiFi 获取列表,连接指定 WiFi ,监听网络变化等等. 下面是效果图: GitHub 下载地址:https: ...

  5. H5获取wifi列表及当前wifi

    H5获取wifi列表及当前wifi <script type="text/javascript" src="./js/jquery.js">< ...

  6. 笔记本电脑不显示WIFI列表无法连接到网络的解决办法

    笔记本电脑不显示WIFI列表无法连接到网络的解决办法 笔记本电脑WiFi列表不显示,如下图: 以下以Win10系统来操作演示解决办法: (一)检查网卡驱动是否正常 笔记本电脑突然不显示WiFi列表,多 ...

  7. ESP32入门基础之ESP32作为 WIFI Station去连接wifi热点

    文章目录 1 工程简介 1.1 在menuconfig配置WiFi账号.密码 1.2 在程序中配置WiFi账号.密码 1 工程简介 参考工程为乐鑫官方例程: 实验目标: ESP32作为WiFi sta ...

  8. java代码实现在Windows中自动连接WiFi(乞丐版)

    之前在学校用校园网时每次开机自己都要连接WiFi然后手动登入校园账号,频繁的登入使我萌生了能不能用代码来完成这些操作.说动手就动手,但现在暑假不在学校无法查看校园登入的一些参数,于是打算先实现自动连接 ...

  9. Android之Wifi学习(2)------连接Wifi

    之前有一篇文章已经简单的讲过Wifi的基本知识,请见Android之Wifi学习(1).本文主要在此基础上,进一步完善程序功能,主要功能有打开无线网卡.关闭无线网卡.检查网卡状态.扫描网络.扫描结果. ...

最新文章

  1. mysql 锁-比较详细、深入的介绍
  2. 保存光谱曲线出现问题_直读光谱仪计量周期-这家好【博越仪器】
  3. 简单工厂 jdk源码解析
  4. 在JAVA中如何检查字符串日期的合法性
  5. freeBSD的vi
  6. 用大数据看程序员,让你见到不为人知的一面!
  7. 20180828 上课截图
  8. 客户端手册_增值税发票管理系统“2.0”版——客户端环境配置问题
  9. linux看请求报文发送的ip,Linux C 实现最简单的ICMP_ECHO请求报文发送
  10. 不确定度计算器_内审员、LIMS系统、外部评审员、不确定度、注册计量师、实验数据分析处理、质量控制和期间核查、方法验证和确认 网络培训汇总...
  11. IDEA安装Yapi插件
  12. Windows错误“ 0xc0000005”
  13. 腾讯QQ体验版 for Macv8.4.10.73官方
  14. docker查看内部tcp长连接
  15. html中iframe标签的用法详解
  16. HTML字符实体(关于amp;nbsp;amp;gt;amp;lt;等)
  17. 无人驾驶感知篇之融合(一)
  18. 程序员的8个级别,你属于哪个级别?
  19. 在Docker中安装Home Assistant系统(以群晖系统为例)【Home Assistant入门安装篇1-2】
  20. altera 设计--仿真--下载

热门文章

  1. 无线电空间传输损耗衰减计算(转帖)
  2. 硬件基础-时序逻辑电路-触发器画波形图问题解析
  3. TeeChart8.0安装 ---转贴收藏
  4. 耶稣有13个门徒,其中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:13人围坐一圈,从第一个开始报号:1,2,3,1,2,3……,凡是报到“3”就退出圈子,最后留在圈内的人就是出卖耶稣的叛徒
  5. 台式机属于微型计算机设备吗,pc机属于什么型计算机
  6. 浪潮信息携手龙蜥社区 建开源社区新生态
  7. 微软mta国际认证的python编程考试_Certiport账号和MOS考试/MTA考试和MCE考试注册指引...
  8. windows7内存诊断工具有用吗_开机windows内存诊断工具怎么打开_win7开机出现内存诊断工具如何使用...
  9. C++ 【vector模拟实现】
  10. 2021年的第一个小目标:软考高级