最近遇到的需求是将 wifi 热点相关信息展示给用户,于是,有三处功能需要实现:

  1. 判断是否开启了热点
  2. 获取 SSID
  3. 获取 PSK

以下是工具类的全部代码:

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
import android.content.Context;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;
import android.util.Log;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class WifiApUtil {

private static final String TAG = "qll_wifiaputils";

/**
* 返回 SSID
* @param context 调用上下文
* @return
* */
public static String getSsid(Context context) {
String ssid = "";

WifiManager wifiManager = (WifiManager) context
.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
try {
Method getWifiApConfiguration = wifiManager.getClass().getMethod("getWifiApConfiguration");
getWifiApConfiguration.setAccessible(true);
WifiConfiguration configuration = (WifiConfiguration) getWifiApConfiguration.invoke(wifiManager);
ssid = configuration.SSID;
} catch (NoSuchMethodException e) {
Log.e(TAG, "getSsid: 没有这个方法" + e.toString() );
} catch (IllegalAccessException e) {
Log.e(TAG, "getSsid: 没有权限" + e.toString() );
} catch (InvocationTargetException e) {
Log.e(TAG, "getSsid: 调用目标出错----" + e.toString() );
}
return ssid;
}

/**
* 返回 preSharedKey
* @param context 调用上下文
* @return
* */
public static String getPsk(Context context) {
String psk = "";

WifiManager wifiManager = (WifiManager) context
.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
try {
Method getWifiApConfiguration = wifiManager.getClass().getMethod("getWifiApConfiguration");
getWifiApConfiguration.setAccessible(true);
WifiConfiguration configuration = (WifiConfiguration) getWifiApConfiguration.invoke(wifiManager);
psk = configuration.preSharedKey;
} catch (NoSuchMethodException e) {
Log.e(TAG, "getPsk: 没有这个方法" + e.toString() );
} catch (IllegalAccessException e) {
Log.e(TAG, "getPsk: 没有权限" + e.toString() );
} catch (InvocationTargetException e) {
Log.e(TAG, "getPsk: 调用目标出错----" + e.toString() );
}
return psk;
}

/**
* 是否打开无线热点
* @param context 调用上下文
* @return true if wifiAP is enabled
* */
public static boolean isWifiApEnable(Context context) {
boolean isEnabled = false;
WifiManager wifiManager = (WifiManager) context
.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
try {
Method isWifiApEnabled = wifiManager.getClass().getMethod("isWifiApEnabled");
isWifiApEnabled.setAccessible(true);
isEnabled = (Boolean) isWifiApEnabled.invoke(wifiManager);

} catch (NoSuchMethodException e) {
Log.e(TAG, "isWifiApEnable: 没有这个方法" + e.toString() );
} catch (IllegalAccessException e) {
Log.e(TAG, "isWifiApEnable: 没有权限" + e.toString() );
} catch (InvocationTargetException e) {
Log.e(TAG, "isWifiApEnable: 调用目标出错----" + e.toString() );
}

return isEnabled;
}
}

emmm, 文档注释还在学习中 =-=

如果需要配置的其它信息,可以直接进 configuration 看看。

参考文档

Android盒子开发,获取网络的信息(热点,WIFI,有线)