✍️作者简介:沫小北/码农小北(专注于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 工具类
typescript
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 简单使用实例
java
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();
}
}
本文使用 文章同步助手 同步