当开发基于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(); } }