WifiUtils wifi工具类

2023-11-16

import java.util.ArrayList;
import java.util.List;


import android.content.Context;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.net.wifi.WifiManager.WifiLock;
import android.util.Log;


public class WifiUtils {
private WifiManager localWifiManager;//提供Wifi管理的各种主要API,主要包含wifi的扫描、建立连接、配置信息等
//private List<ScanResult> wifiScanList;//ScanResult用来描述已经检测出的接入点,包括接入的地址、名称、身份认证、频率、信号强度等
private List<WifiConfiguration> wifiConfigList;//WIFIConfiguration描述WIFI的链接信息,包括SSID、SSID隐藏、password等的设置
private WifiInfo wifiConnectedInfo;//已经建立好网络链接的信息
private WifiLock wifiLock;//手机锁屏后,阻止WIFI也进入睡眠状态及WIFI的关闭

public WifiUtils( Context context){
localWifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE);
}

    //检查WIFI状态
public int WifiCheckState(){
return localWifiManager.getWifiState();
}

//开启WIFI
public void WifiOpen(){
if(!localWifiManager.isWifiEnabled()){
localWifiManager.setWifiEnabled(true);
}
}

//关闭WIFI
public void WifiClose(){
if(localWifiManager.isWifiEnabled()){
localWifiManager.setWifiEnabled(false);
}
}

//扫描wifi
public void WifiStartScan(){
localWifiManager.startScan();
}

//得到Scan结果
public List<ScanResult> getScanResults(){
return localWifiManager.getScanResults();//得到扫描结果
}


//Scan结果转为Sting
public List<String> scanResultToString(List<ScanResult> list){
List<String> strReturnList = new ArrayList<String>();
for(int i = 0; i < list.size(); i++){
ScanResult strScan = list.get(i);
String str = strScan.toString();
boolean bool = strReturnList.add(str);
if(!bool){
Log.i("scanResultToSting","Addfail");
}
}
return strReturnList;
}

//得到Wifi配置好的信息
public void getConfiguration(){
wifiConfigList = localWifiManager.getConfiguredNetworks();//得到配置好的网络信息
for(int i =0;i<wifiConfigList.size();i++){
Log.i("getConfiguration",wifiConfigList.get(i).SSID);
Log.i("getConfiguration",String.valueOf(wifiConfigList.get(i).networkId));
}
}
//判定指定WIFI是否已经配置好,依据WIFI的地址BSSID,返回NetId
public int IsConfiguration(String SSID){
Log.i("IsConfiguration",String.valueOf(wifiConfigList.size()));
for(int i = 0; i < wifiConfigList.size(); i++){
Log.i(wifiConfigList.get(i).SSID,String.valueOf( wifiConfigList.get(i).networkId));
if(wifiConfigList.get(i).SSID.equals(SSID)){//地址相同
return wifiConfigList.get(i).networkId;
}
}
return -1;
}


//添加指定WIFI的配置信息,原列表不存在此SSID
public int AddWifiConfig(List<ScanResult> wifiList,String ssid,String pwd){
int wifiId = -1;
for(int i = 0;i < wifiList.size(); i++){
ScanResult wifi = wifiList.get(i);
if(wifi.SSID.equals(ssid)){
Log.i("AddWifiConfig","equals");
WifiConfiguration wifiCong = new WifiConfiguration();
wifiCong.SSID = "\""+wifi.SSID+"\"";//\"转义字符,代表"
wifiCong.preSharedKey = "\""+pwd+"\"";//WPA-PSK密
wifiCong.hiddenSSID = false;
wifiCong.status = WifiConfiguration.Status.ENABLED;
wifiId = localWifiManager.addNetwork(wifiCong);//将配置好的特定WIFI密码信息添加,添加完成后默认是不激活状态,成功返回ID,否则为-1
if(wifiId != -1){
return wifiId;
}
}
}
return wifiId;
}


public int AddWifiConfig(String ssid,String pwd){
int wifiId = -1;

Log.i("AddWifiConfig","equals");
WifiConfiguration wifiCong = new WifiConfiguration();
wifiCong.SSID = "\""+ssid+"\"";//\"转义字符,代表"
wifiCong.preSharedKey = "\""+pwd+"\"";//WPA-PSK密码
wifiCong.hiddenSSID = false;
wifiCong.status = WifiConfiguration.Status.ENABLED;
wifiId = localWifiManager.addNetwork(wifiCong);//将配置好的特定WIFI密码信息添加,添加完成后默认是不激活状态,成功返回ID,否则为-1
if(wifiId != -1){
return wifiId;
}


return wifiId;
}

//连接指定Id的WIFI
public boolean ConnectWifi(int wifiId){
for(int i = 0; i < wifiConfigList.size(); i++){
WifiConfiguration wifi = wifiConfigList.get(i);
if(wifi.networkId == wifiId){
while(!(localWifiManager.enableNetwork(wifiId, true))){//激活该Id,建立连接
Log.i("ConnectWifi",String.valueOf(wifiConfigList.get(wifiId).status));//status:0--已经连接,1--不可连接,2--可以连接
}
return true;
}
}
return false;
}

//创建一个WIFILock
public void createWifiLock(String lockName){
wifiLock = localWifiManager.createWifiLock(lockName);
}

//锁定wifilock
public void acquireWifiLock(){
wifiLock.acquire();
}

//解锁WIFI
public void releaseWifiLock(){
if(wifiLock.isHeld()){//判定是否锁定
wifiLock.release();
}
}

//得到建立连接的信息
public void getConnectedInfo(){
wifiConnectedInfo = localWifiManager.getConnectionInfo();
}
//得到连接的MAC地址
public String getConnectedMacAddr(){
return (wifiConnectedInfo == null)? "NULL":wifiConnectedInfo.getMacAddress();
}

//得到连接的名称SSID
public String getConnectedSSID(){
return (wifiConnectedInfo == null)? "NULL":wifiConnectedInfo.getSSID();
}

//得到连接的IP地址
public int getConnectedIPAddr(){
return (wifiConnectedInfo == null)? 0:wifiConnectedInfo.getIpAddress();
}

//得到连接的ID
public int getConnectedID(){
return (wifiConnectedInfo == null)? 0:wifiConnectedInfo.getNetworkId();
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WifiUtils wifi工具类 的相关文章

  • Android Studio 3.0.0 不允许 DOCTYPE

    升级到Android Studio 3 0 0 同步并更新gradle插件 出现以下错误 Error DOCTYPE not allowed if function http apache org xml features disallow
  • v7 RecyclerView NullPointerException AccessibilityDelegateCompat.getBridge()

    运行我的 recyclerview 列表片段时出现此错误 java lang NullPointerException Attempt to invoke virtual method java lang Object android su
  • 使用 android AudioTrack 在左或右扬声器中播放声音

    我正在应用程序中的 AudioTrack 的帮助下播放声音 但我想在特定扬声器 耳朵中播放声音 即左扬声器或右扬声器或两个扬声器 以下代码是我用来播放声音的 private AudioTrack generateTone double fr
  • 在 Anko DSL 中创建自定义 View/ViewGroup 类

    我想创建一个自定义视图 它只是一些 Android 视图的包装 我考虑创建一个自定义 ViewGroup 来管理其子视图的布局 但我不需要这么复杂 我基本上想做的是 class MainActivity verticalLayout tex
  • android webview 函数 onPagefinished 被调用两次

    我的android webview功能onPageFinished被调用两次 我不知道为什么 但它在 android 2 2 上运行良好 但当我将其升级到 4 时 它就不起作用了 代码附在下面 Code Override public vo
  • 使用 RecyclerView 适配器在运行时更改布局屏幕

    我有两个布局文件 如下所示 如果列表中存在数据 则我显示此布局 当列表为空时 我会显示此布局 现在我想在运行时更改布局 当用户从列表中删除最后一项时 我想将布局更改为第二张图片中显示的 空购物车布局 In getItemCount Recy
  • 如何以编程方式断开拨出呼叫

    我使用以下代码以编程方式断开呼叫 但它不起作用 private void callDisconnect try TelephonyManager manager TelephonyManager this getSystemService
  • 以编程方式更新 Android 中的联系人姓名和电话号码

    我创建一个应用程序来读取 更新 删除联系人详细信息 这是更新联系人姓名和电话号码的问题 有人可以帮助我吗 我该怎么做 我正在使用以下代码 但它不起作用 Override public View onCreateView LayoutInfl
  • 应用内结算错误

    我的 UNMANAGED 应用内购买无法正常工作 在它完美运行之前 我可以使用测试帐户成功购买 但它突然不起作用了 因为我记得我对商家帐户所做的只是添加更多 2 4 个测试帐户 添加后 我的应用内购买将不起作用 所以我更新了公钥并上传了一个
  • Android Studio更新到1.5后Gradle错误

    今天我已将 Android Studio 更新到 v1 5 我的 libgdx 项目在这次更新之前运行良好 现在我收到此错误消息 Error Unable to load class org gradle mvn3 org sonatype
  • 如何防止布局的方向改变,而不是整个屏幕/活动的方向改变

    我需要一个子布局 可以是任何布局 例如FrameLayout or RelativeLayout 忽略方向变化并始终保持横向 但不是它的父级或任何其他兄弟布局 视图 它们应该相应地改变它们的方向 因此 我不能使用setRequestedOr
  • 导航抽屉默认片段

    我是一名新手开发人员 我正在将导航抽屉与 android support v7 集成到我的应用程序中 我有一个问题 当我启动应用程序时 主要布局是这样的
  • 无法获取 Facebook 传入请求

    我正在尝试在我的 Facebook android 游戏应用程序中实现发送数据并接受该数据 我正在关注https developers facebook com docs android send requests notification
  • 如何以编程方式启动 ssh 服务器 android,以及如何获取连接到设备的用户名和密码

    我正在开发像这样的应用程序sshdroid 我想在 Android 操作系统上打开 ssh 连接 并且我想从电脑连接应用程序 我使用了 JSCH lib 但是这个lib用于将android连接到pc 我的要求是pc到android 任何人都
  • 为什么Android应用程序在发布到市场后尺寸会增加?

    我最近在 Android 市场上发布了我的应用程序 显示应用程序大小为 5 4MB 而实际 apk 大小为 2 8MB 为什么显示多出2MB 我应该如何限制我的应用程序大小 请帮我 您的应用程序大小会增加 因为您使用了复制保护选项ON在发布
  • onBackPressed 隐藏 不破坏 Activity

    我知道如何取消后退按键 以便活动 主窗口保持可见 public void onBackPressed return 我的目标是隐藏该活动 但是 在没有完成它的情况下 您如何在 onBackPressed 事件中做到这一点 即我想达到 onP
  • Nexus 7 (2013) 和 Win 7 64 - 尽管检查了许多论坛和在线资源,仍无法安装 USB 驱动程序

    我正在尝试设置 Nexus 7 2013 进行调试 但我在安装 USB 驱动程序的步骤中陷入困境 到目前为止 这是我尝试过的 采取的步骤 在 Nexus 7 2013 上打开调试模式 连接设备至 PC 下载 Google USB 驱动程序于
  • 将图像添加到自定义 AlertDialog

    我制作了一个 AlertDialog 让用户可以从我显示的 4 个选项中选择一个 前 3 个让他们在单击号码时直接拨打号码 第 4 个显示不同的视图 现在看起来是这样的 由于第四个选项的目的是不同的任务 我想让它看起来不同 因为用户可能会感
  • FCM onMessageReceived 应用程序运行时返回空白消息和标题

    正如您在标题中所写 当应用程序关闭时 它运行良好 并且onMessageReceived获取消息正文和标题 但如果应用程序处于前台模式 运行模式 则可以发送通知 但没有消息和标题 请问该怎么办 代码 Override public void
  • 安卓的限制

    我需要构建一个应用程序 该应用程序拍摄相机图像并将其上传到网络 在网络上进行一些处理并返回真 假 我在这方面遇到了一些问题 希望得到澄清 1 我的应用程序有什么方法可以知道 Android 相机捕获的图像吗 我从这里明白了什么 Androi

随机推荐

  • ChatGPT之后,值得关注的垂直领域大模型

    垂直领域大模型是指在特定的领域或行业中经过训练和优化的大型语言模型 与通用语言模型相比 垂直领域大模型更专注于某个特定领域的知识和技能 具备更高的领域专业性和实用性 题图 from unsplash 与通用大模型相比 垂直领域大模型具有以下
  • VMware下安装win7教程

    上课会用到win7 闲来无事记录下安装win7过程 我是不会说教傻子朋友的 一 安装镜像 在网上找了好多不行最后找到了 Windows7 64位 ed2k file cn windows 7 ultimate with sp1 x64 dv
  • .c文件生成.cgi文件

    方法一 hello c文件 方法二 base h cgic c cgic h file upload c多文件同时编译
  • 计算机网络—Http协议的特点,基本格式,状态码,get和post的区别

    目录 一 Http协议是什么 1 什么是Http协议 2 Http协议的特点 3 Cookie和 Session的区别 面试常考 二 Http协议的基本格式 1 Http请求 Request 2 Http响应 Response 3 协议格式
  • Cesium 物理隔绝-取消默认请求bing底图

    说明 场景是物理隔绝的网络 即不能使用在线地图服务 这里有一个认证 在离线没网的情况下会一直请求卡在那里 解决方案 直接上代码 var defaultImagery new Cesium ProviderViewModel name def
  • POJ - 2531 Network Saboteur

    A university network is composed of N computers System administrators gathered information on the traffic between nodes
  • LInux下Mplayer字幕乱码,日文字体部分乱码解决方案

    ASS字幕如果不能加载的话 则需要把ASS字幕编码由utf16转换为utf8 用gedit也可以用这个也可以 iconv f utf16 t utf8 subtitle utf16 ass gt subtitle utf8 ass 在Pre
  • doris & StarRocks 错题本

    一 spark streaming load写入失败 Reason column count mismatch expect 25 real 1 src line demo masking 1 2018 02 17 1 B35C300672
  • 【排序算法(一)】各种排序算法的主要方式和复杂度分析

    概念 1 排序 按关键字有序的序列 2 稳定性 假设ki kj 1 lt i j lt n i j 且在排序前ri领先于rj 即i
  • 以区块链技术助力高新技术发展和产业创新

    摘要 区块链技术作为一种新兴技术 其核心特点是去中心化 具有广阔发展前景 将区块链技术作为自主创新和高新技术发展的重要突破口 是当前产业创新的重要途径之一 区块链技术发展的关键是攻克核心技术 为此 应加强相关领域的应用和实践探索 从实践中总
  • Chrome浏览器无法打开特定的网页

    问题描述 chrome浏览器 版本为 87 0 4280 66 正式版本 64 位 打开除了特定网页的其他网页均正常 解决方法 单机Chrome浏览器右上角的 自定义及控制Google Chrome gt 设置 S 将 设置 页面往下拖动后
  • (2022 CVPR) Unbiased Teacher v2

    Unbiased Teacher v2 Semi supervised Object Detection for Anchor free and Anchor based Detectors https github com faceboo
  • 国际基因编辑科技发展报告

    来源 全球技术地图 作者 贾晓峰 中国科学技术信息研究所 摘要 以特异性的改变遗传物质靶向基因序列为目标的基因编辑技术是近年生命科学领域最热门的研究领域之一 围绕基因编辑的相关领域研究和人物事件连续多年入选Nature国际科学事件和科学人物
  • Android MediaCodec硬件解码视频播放

    1 MediaCodec 是什么 MediaCodec类可以访问底层媒体编解码器框架 StageFright 或 OpenMAX 即编解码组件 是Android 的低层多媒体基础设施的一部分 通常与MediaExtractor MediaS
  • 推动刷脸支付为入口的场景新零售新科技浪潮

    刷脸支付正呈现不断创新 与其他数字化软硬件无缝链接 场景深入 更新迭代 打造人性化服务等势头较好局面 但火爆的背后应该是谨慎的对待 而不是疯狂增长 此外 随着刷脸支付的不断深入 移动支付也更加深入到生活多场景 这也为 刷脸支付 未来的市场扩
  • 进程间的通信方式与同步方式有哪些?进程间的通信方式与同步方式区别是什么?线程之间的通信方式与同步方式有哪些?线程间的通信方式与同步方式区别是什么?一文全部搞懂

    进程间的通信方式与同步方式有哪些 进程间的通信方式与同步方式区别是什么 线程之间的通信方式与同步方式有哪些 线程间的通信方式与同步方式区别是什么 本文会详细解释这几个问题 一开始在学习操作系统的时候经常糊涂 感觉比较混乱 进程间的通信方式与
  • 1055 集体照 (25 分)

    拍集体照时队形很重要 这里对给定的 N 个人 K 排的队形设计排队规则如下 每排人数为 N K 向下取整 多出来的人全部站在最后一排 后排所有人的个子都不比前排任何人矮 每排中最高者站中间 中间位置为 m 2 1 其中 m 为该排人数 除法
  • 个人笔记1

  • JSON Schema 详解

    简介 要真正理解 JSON Schema 首先需要知道什么是 JSON JSON 代表 JavaScript对象表示法 是一种简单的数据交换格式 它最初是万维网的一个符号 因为JavaScript存在于大多数Web浏览器中 而JSON是基于
  • WifiUtils wifi工具类

    import java util ArrayList import java util List import android content Context import android net wifi ScanResult impor