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();
    }
}
相关推荐
晚风予卿云月19 分钟前
【C++高并发内存池】 2.ThreadCache设计
开发语言·c++·高并发内存池·tcmalloc
前端小D30 分钟前
React Native Android 项目搭建
android·react native·react.js
Dovis(誓平步青云)1 小时前
拖动关键帧角色就抽动,动画编辑器怎样补齐中间状态
开发语言·前端·javascript·机器学习·编辑器
行走的陀螺仪1 小时前
Claude Code 从入门到实战(二):Bash工具、Plan模式与后台任务
开发语言·bash
努力努力再努力wz1 小时前
【Lua 入门系列】从执行模型到事件驱动:一文理解 Lua 有栈协程、挂起恢复与协作式调度
开发语言·lua
椒颜皮皮虾྅1 小时前
一套 C# 接口,解锁四类视觉任务:DeploySharp 分类、分割、关键点与旋转框实战
开发语言·分类·c#
恋猫de小郭1 小时前
感人,Flutter 居然有了一个超实用提案,期待落地
android·前端·flutter
2603_965896622 小时前
JavaScript 原型与原型链
开发语言·前端·javascript
朋友圈自动点赞工具2 小时前
Ruby方法查找:对象不存方法
开发语言·前端·ruby·科技资讯
D e re k ZH2 小时前
C++ 模板与泛型编程进阶(No 2)
开发语言·c++