以下是使用Android 10+的Wifi-API时可能遇到的问题以及解决方案。
问题1:调用WifiManager.getConnectionInfo().getBSSID()时返回的结果为null。
解决方案:在Android 10+中,为了保护用户的隐私,连接到Wifi时MAC地址被隐藏了。因此,调用getBSSID()将返回null。要获取MAC地址,您可以使用NetworkCapabilities.getTransportInfo().getPhysicalAddress()。
示例代码:
private String getMacAddress(Network network) { NetworkCapabilities capabilities = connectivityManager.getNetworkCapabilities(network); LinkProperties linkProperties = connectivityManager.getLinkProperties(network);
if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) && linkProperties != null) {
return linkProperties.getLinkAddresses().stream()
.filter(la -> la.getAddress() instanceof Inet4Address)
.findFirst()
.map(la -> {
try {
Method method = la.getClass().getMethod("getFlags");
int flags = (int) method.invoke(la);
if ((flags & (1 << 0)) == 0) {
return null;
}
return capabilities.getTransportInfo().getPhysicalAddress();
} catch (Exception e) {
return null;
}
})
.orElse(null);
}
return null;
}
问题2:Android 10+中的WifiScanResult的SSID和BSSID被隐藏。
解决方案:在Android 10+中,为了保护用户的隐私,WifiScanResult的SSID和BSSID也被隐藏了。你可以使用WifiNetworkSuggestion来获取SSID和BSSID。
示例代码:
private List
for (WifiNetworkSuggestion suggestion : suggestionsList) {
ssidList.add(suggestion.getSsid());
}
return ssidList;
}
问题3:Android 10+中WifiP2pManager,WifiManager和WifiEnterpriseConfig api被修改。
解决