我需要检查android上当前连接的wifi SSID.我分别用诺基亚6和OnePlus 5检查了Oreo 8.1.0和Oreo 8.0.其他具有不同操作系统版本的手机正常使用此代码.我的代码有什么问题吗?
private WifiInfo wifiInfo;
private String ssid = "";
private WifiManager wifiManager;
private boolean getWifiStatus() {
wifiManager= (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
wifiInfo = wifiManager.getConnectionInfo();
ssid = "";
ssid = wifiInfo.getSSID();
ConnectivityManager cm =
(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isWiFi = false;
if(activeNetwork != null){
isWiFi = activeNetwork.getType() == ConnectivityManager.TYPE_WIFI;
}
Log.d(TAG, "getWifiStatus: " + ssid);
if(ssid.contains("TripleMZim") && wifiManager.isWifiEnabled() && isWiFi ){
return true;
}
else{
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
清单文件中的权限:
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
Run Code Online (Sandbox Code Playgroud) 在 Android 9.0&8.0 中获取 SSID 没有问题,
但在 Android 10.0(Q) 中无法获取 SSID。
我应该怎么做?Android 10.0 中有关 wifi 的文档链接在哪里?我试图找到该文档,但找不到。
Android 9.0&8.0获取SSID没有问题
WifiManager mWifiManager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
assert mWifiManager != null;
WifiInfo info = mWifiManager.getConnectionInfo();
return info.getSSID();
Run Code Online (Sandbox Code Playgroud)
ConnectivityManager connManager = (ConnectivityManager) context.getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
assert connManager != null;
NetworkInfo networkInfo = connManager.getActiveNetworkInfo();
if (networkInfo.isConnected()) {
if (networkInfo.getExtraInfo() != null) {
return networkInfo.getExtraInfo().replace("\"", "");
}
}
Run Code Online (Sandbox Code Playgroud) 如果我使用 API 27 编译但目标 API 25,我将正确获取这些值。如果我将 targetSdkVersion 设置为 27,则无法正确检索这些值。
定位 SDK 25 或更少,值是正确的,但定位 26 或更多,我得到这些值:
SSID 给出 <unknown ssid>
BBSSID 给出 02:00:00:00:00:00
这些是我的清单权限,都是普通权限,不需要用户授予:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Run Code Online (Sandbox Code Playgroud)
这是示例代码:
WifiManager wifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE);
WifiInfo connectionInfo = wifiManager.getConnectionInfo();
connectionInfo.getSSID();
connectionInfo.getBSSID();
Run Code Online (Sandbox Code Playgroud)
面向 SDK 26 或更高版本时发生了什么变化?我们还应该做些什么来获得这些值?