Android WiFi工具类

Android WiFi工具类

当开发基于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 工具类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
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 简单使用实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
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();
}
}