问题描述:
在 Android Studio 中,如果您使用了 API 29 及更高版本,可能会遇到 WifiManager 无法工作的问题。具体表现为获取到的 Wifi 信息为空或为 null。
解决方案:
以下是一个可以解决此问题的示例代码:
public class WifiUtils {
/**
* 获取 WifiManager 实例
* @param context Context 对象
* @return WifiManager 实例
*/
private static WifiManager getWifiManager(Context context) {
return (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
}
/**
* 获取 WifiInfo 实例
* @param context Context 对象
* @return WifiInfo 实例
*/
public static WifiInfo getWifiInfo(Context context) {
WifiManager wifiManager = getWifiManager(context);
return (wifiManager != null) ? wifiManager.getConnectionInfo() : null;
}
/**
* 获取 Wifi 名称
* @param context Context 对象
* @return Wifi 名称
*/
public static String getWifiName(Context context) {
WifiInfo wifiInfo = getWifiInfo(context);
return (wifiInfo != null) ? wifiInfo.getSSID().replace("\"", "") : null;
}
/**
* 获取 Wifi MAC 地址
* @param context Context 对象
* @return Wifi MAC 地址
*/
public static String getWifiMacAddress(Context context) {
WifiInfo wifiInfo = getWifiInfo(context);
return (wifiInfo != null) ? wifiInfo.getMacAddress() : null;
}
}
通过上述代码,可以使用 WifiUtils 中的方法获取到 Wifi 名称和 MAC 地址。在使用之前需要添加相应的权限:
参考文献:
[1] https://stackoverflow.com/questions/64606698/get-current-wifi-name-in-android-q-10-returns-null
[2] https://developer.android.com/guide/topics/connectivity/wifi-scan#wifi-scan-api