Android 6.0 检查是否连接到 Wi-Fi(没有互联网)
Android 6.0 check if connected to a Wi-Fi (without Internet)
检查 Android 设备是否连接到 Wi-Fi 网络的方法如下:
NetworkInfo info = ((ConnectivityManager) ctx.getSystemService(Context
.CONNECTIVITY_SERVICE)).getNetworkInfo(ConnectivityManager.TYPE_WIFI);
boolean isWifiConnected = info != null && info.isAvailable() && info.isConnected();
这适用于 Android 6.0 之前的所有版本。
但是,在 Android 6.0 上,如果设备连接到 Wi-Fi 而无法访问互联网,info.isConnected() returns false。
那么,我如何确定设备已连接到 Android 6.0 上的 Wi-Fi?
我也有同样的问题。您可以检查是否有SSID,这意味着连接:
WifiManager wifiManager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
if (wifiManager.getConnectionInfo() != null) {
String ssid = wifiManager.getConnectionInfo().getSSID();
}
系统正在将流量路由到小区连接,因此 OS 报告 Wi-Fi 网络已断开连接。 Android 6.0 更改了底层路由逻辑以避免没有互联网的 Wi-Fi 连接。这就是为什么 connectivityManager.getActiveNetworkInfo()
不再 returns Wi-Fi 连接 NetworkInfo
w/o 互联网(如果有活动的蜂窝数据连接)。
似乎 ConnectivityManager.bindProcessToNetwork(网络网络)是您告诉 OS 喜欢一个网络而不是另一个网络的方式。
对于 Android 5.0 及更高版本,您需要使用不同的 API 来检查设备是否已连接到 WiFi 网络。该设备还可能同时连接到移动网络。
ConnectivityManager connectivityManager = ((ConnectivityManager) ctx.getSystemService
(Context.CONNECTIVITY_SERVICE));
boolean isWifiConnected = false;
Network[] networks = connectivityManager.getAllNetworks();
if (networks == null) {
isWifiConnected = false;
} else {
for (Network network : networks) {
NetworkInfo info = connectivityManager.getNetworkInfo(network);
if (info != null && info.getType() == ConnectivityManager.TYPE_WIFI) {
if (info.isAvailable() && info.isConnected()) {
isWifiConnected = true;
break;
}
}
}
}
return isWifiConnected;
检查 Android 设备是否连接到 Wi-Fi 网络的方法如下:
NetworkInfo info = ((ConnectivityManager) ctx.getSystemService(Context
.CONNECTIVITY_SERVICE)).getNetworkInfo(ConnectivityManager.TYPE_WIFI);
boolean isWifiConnected = info != null && info.isAvailable() && info.isConnected();
这适用于 Android 6.0 之前的所有版本。 但是,在 Android 6.0 上,如果设备连接到 Wi-Fi 而无法访问互联网,info.isConnected() returns false。
那么,我如何确定设备已连接到 Android 6.0 上的 Wi-Fi?
我也有同样的问题。您可以检查是否有SSID,这意味着连接:
WifiManager wifiManager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
if (wifiManager.getConnectionInfo() != null) {
String ssid = wifiManager.getConnectionInfo().getSSID();
}
系统正在将流量路由到小区连接,因此 OS 报告 Wi-Fi 网络已断开连接。 Android 6.0 更改了底层路由逻辑以避免没有互联网的 Wi-Fi 连接。这就是为什么 connectivityManager.getActiveNetworkInfo()
不再 returns Wi-Fi 连接 NetworkInfo
w/o 互联网(如果有活动的蜂窝数据连接)。
似乎 ConnectivityManager.bindProcessToNetwork(网络网络)是您告诉 OS 喜欢一个网络而不是另一个网络的方式。
对于 Android 5.0 及更高版本,您需要使用不同的 API 来检查设备是否已连接到 WiFi 网络。该设备还可能同时连接到移动网络。
ConnectivityManager connectivityManager = ((ConnectivityManager) ctx.getSystemService
(Context.CONNECTIVITY_SERVICE));
boolean isWifiConnected = false;
Network[] networks = connectivityManager.getAllNetworks();
if (networks == null) {
isWifiConnected = false;
} else {
for (Network network : networks) {
NetworkInfo info = connectivityManager.getNetworkInfo(network);
if (info != null && info.getType() == ConnectivityManager.TYPE_WIFI) {
if (info.isAvailable() && info.isConnected()) {
isWifiConnected = true;
break;
}
}
}
}
return isWifiConnected;