Android WiFi工具类

✍️作者简介:沫小北/码农小北(专注于Android、Web、TCP/IP等技术方向)

🐳博客主页:开源中国稀土掘金51cto博客博客园知乎简书慕课网CSDN

🔔如果文章对您有一定的帮助请👉关注✨、点赞👍、收藏📂、评论💬。

🔥如需转载请参考【转载须知】

当开发基于WiFi的Android应用时,对WiFi连接、管理和配置的操作非常重要。为了简化这些操作,我们可以使用一个名为WifiUtils的工具类。这个工具类提供了一系列方法,可以方便地执行诸如检查WiFi状态、打开或关闭WiFi、扫描可用的WiFi网络、连接到指定的WiFi网络、断开当前连接的WiFi网络等操作。

这个工具类还提供了一些辅助方法,比如获取当前连接的WiFi信息、检查是否有当前可用的WiFi连接、添加WiFi配置到系统、创建WiFi配置、获取是否已经存在的配置、移除同名WiFi、判断扫描结果中是否包含了特定名称的WiFi等。这些方法使得WiFi的管理和配置变得更加便捷和灵活。

使用这个WifiUtils工具类,我们可以轻松地在Android应用中执行WiFi相关的操作,无论是连接到特定的WiFi网络,还是管理已经连接的网络,都可以通过简单的调用实现。这样可以极大地简化了开发过程,提高了应用的可靠性和用户体验。WifiUtils工具类为Android开发人员提供了一个简单而强大的工具,可以在开发过程中更方便地管理和配置WiFi网络。通过使用这个工具类,开发人员可以更专注于应用的核心功能,而无需过多关注底层的WiFi管理细节。

1.WifiUtils 工具类

复制代码
import android.content.Context;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import java.util.List;

public class WifiUtils {
    private final WifiManager wifiManager;

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

    // 检查WiFi是否可用
    public boolean isWifiEnabled() {
        return wifiManager.isWifiEnabled();
    }

    // 打开WiFi
    public void openWifi() {
        if (!wifiManager.isWifiEnabled()) {
            wifiManager.setWifiEnabled(true);
        }
    }

    // 关闭WiFi
    public void closeWifi() {
        if (wifiManager.isWifiEnabled()) {
            wifiManager.setWifiEnabled(false);
        }
    }

    // 扫描WiFi网络
    public void scanWifi() {
        wifiManager.startScan();
    }

    // 获取扫描到的WiFi列表
    public List<WifiConfiguration> getScanResults() {
        return wifiManager.getConfiguredNetworks();
    }

    // 获取当前连接的WiFi
    public WifiInfo getConnectedWifiInfo() {
        return wifiManager.getConnectionInfo();
    }

    // 判断是否有当前可用的WiFi连接
    public boolean isWifiConnected() {
        WifiInfo wifiInfo = wifiManager.getConnectionInfo();
        return wifiInfo != null && wifiInfo.getNetworkId() != -1;
    }

    // 关闭所有连接
    public void disconnectWifi() {
        wifiManager.disconnect();
    }

    // 连接WiFi
    public void connectToWifi(WifiConfiguration wifiConfig) {
        int netId = wifiManager.addNetwork(wifiConfig);
        wifiManager.enableNetwork(netId, true);
    }

    // 移除WiFi
    public void removeWifi(int netId) {
        wifiManager.removeNetwork(netId);
        wifiManager.saveConfiguration();
    }

    // 添加WiFi到系统
    public int addNetwork(WifiConfiguration wifiConfig) {
        return wifiManager.addNetwork(wifiConfig);
    }

    // 创建配置
    public WifiConfiguration createWifiConfig(String ssid, String password, int type) {
        WifiConfiguration config = new WifiConfiguration();
        config.SSID = "\"" + ssid + "\"";
        switch (type) {
            case 1:
                config.hiddenSSID = true;
                config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
                break;
            case 2:
                config.hiddenSSID = true;
                config.wepKeys[0] = "\"" + password + "\"";
                config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
                config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.SHARED);
                config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
                config.wepTxKeyIndex = 0;
                break;
            case 3:
                config.preSharedKey = "\"" + password + "\"";
                break;
        }
        return config;
    }

    // 获取是否已经存在的配置
    public WifiConfiguration isExist(String ssid) {
        List<WifiConfiguration> existingConfigs = wifiManager.getConfiguredNetworks();
        for (WifiConfiguration existingConfig : existingConfigs) {
            if (existingConfig.SSID.equals("\"" + ssid + "\"")) {
                return existingConfig;
            }
        }
        return null;
    }

    // 去除同名WIFI
    public void removeSameWifi(String ssid) {
        List<WifiConfiguration> existingConfigs = wifiManager.getConfiguredNetworks();
        for (WifiConfiguration existingConfig : existingConfigs) {
            if (existingConfig.SSID.equals("\"" + ssid + "\"")) {
                wifiManager.removeNetwork(existingConfig.networkId);
            }
        }
    }

    // 判断一个扫描结果中,是否包含了某个名称的WIFI
    public boolean isScanResultExist(String ssid, List<WifiConfiguration> existingConfigs) {
        for (WifiConfiguration existingConfig : existingConfigs) {
            if (existingConfig.SSID.equals("\"" + ssid + "\"")) {
                return true;
            }
        }
        return false;
    }

    // WiFi安全类型枚举
    public enum WifiSecurityType {
        OPEN, WEP, WPA
    }
}

2.WifiUtils 简单使用实例

复制代码
import android.os.Bundle;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    WifiUtils wifiUtils;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        wifiUtils = new WifiUtils(this);

        // 检查WiFi是否可用
        boolean isWifiEnabled = wifiUtils.isWifiEnabled();

        // 打开WiFi
        wifiUtils.openWifi();

        // 关闭WiFi
        wifiUtils.closeWifi();

        // 扫描WiFi网络
        wifiUtils.scanWifi();

        // 获取扫描到的WiFi列表
        List<WifiConfiguration> scanResults = wifiUtils.getScanResults();

        // 获取当前连接的WiFi
        wifiUtils.getConnectedWifiInfo();

        // 判断是否有当前可用的WiFi连接
        boolean isWifiConnected = wifiUtils.isWifiConnected();

        // 关闭所有连接
        wifiUtils.disconnectWifi();

        // 创建一个新的WiFi配置
        WifiUtils.WifiConfiguration wifiConfig = wifiUtils.createWifiConfig("YourSSID", "YourPassword", 3);

        // 连接到WiFi
        wifiUtils.connectToWifi(wifiConfig);

        // 移除WiFi
        wifiUtils.removeWifi(0);

        // 添加WiFi到系统
        int netId = wifiUtils.addNetwork(wifiConfig);

        // 获取是否已经存在的配置
        WifiUtils.WifiConfiguration existingConfig = wifiUtils.isExist("YourSSID");

        // 去除同名WIFI
        wifiUtils.removeSameWifi("YourSSID");

        // 判断一个扫描结果中,是否包含了某个名称的WIFI
        boolean isScanResultExist = wifiUtils.isScanResultExist("YourSSID", scanResults);

        // 在这里根据需要进行其他操作
        // ...

        // 示例:显示Toast提示信息
        Toast.makeText(this, "WiFi Enabled: " + isWifiEnabled, Toast.LENGTH_SHORT).show();
    }
}
相关推荐
LawrenceLan3 分钟前
Flutter 零基础入门(十一):空安全(Null Safety)基础
开发语言·flutter·dart
txinyu的博客28 分钟前
解析业务层的key冲突问题
开发语言·c++·分布式
码不停蹄Zzz34 分钟前
C语言第1章
c语言·开发语言
行者961 小时前
Flutter跨平台开发在OpenHarmony上的评分组件实现与优化
开发语言·flutter·harmonyos·鸿蒙
阿蒙Amon1 小时前
C#每日面试题-Array和ArrayList的区别
java·开发语言·c#
SmartRadio2 小时前
ESP32添加修改蓝牙名称和获取蓝牙连接状态的AT命令-完整UART BLE服务功能后的完整`main.c`代码
c语言·开发语言·c++·esp32·ble
且去填词2 小时前
Go 语言的“反叛”——为什么少即是多?
开发语言·后端·面试·go
my_power5202 小时前
车载安卓面试题汇总
android
csj502 小时前
安卓基础之《(15)—内容提供者(1)在应用之间共享数据》
android
知乎的哥廷根数学学派2 小时前
基于生成对抗U-Net混合架构的隧道衬砌缺陷地质雷达数据智能反演与成像方法(以模拟信号为例,Pytorch)
开发语言·人工智能·pytorch·python·深度学习·机器学习