以下是检查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上,如果设备连接到无法访问Internet的Wi-Fi,则info.isConnected()将返回false。
那么,我怎么能确定该设备已连接到Android 6.0上的Wi-Fi?
答案 0 :(得分:3)
对于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;
答案 1 :(得分:2)
我有同样的问题。您可以检查是否存在SSID,这意味着连接:
WifiManager wifiManager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
if (wifiManager.getConnectionInfo() != null) {
String ssid = wifiManager.getConnectionInfo().getSSID();
}
系统正在将流量路由到小区连接,因此操作系统将Wi-Fi网络报告为已断开连接。 Android 6.0改变了底层路由逻辑,以避免没有互联网的Wi-Fi连接。这就是为什么connectivityManager.getActiveNetworkInfo()
如果存在活动的蜂窝数据连接,则不再为没有互联网的Wi-Fi连接返回NetworkInfo
的原因。
似乎ConnectivityManager.bindProcessToNetwork(网络网络)就是告诉操作系统更喜欢一个网络而不是另一个网络。