Я попробовал приведенный ниже код для проверки возможности подключения:
public static NetworkInfo getNetworkInfo(Context context) {
if (context == null)
return null;
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (cm == null)
return null;
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
if (activeNetwork != null && activeNetwork.isConnected())
return activeNetwork;
else {
for (Network n: cm.getAllNetworks()) {
NetworkInfo nInfo = cm.getNetworkInfo(n);
if(nInfo != null && nInfo.isConnected())
return nInfo;
}
}
return activeNetwork;
}
public static boolean isConnectivityAllowed(Context context) {
NetworkInfo info = NetworkUtils.getNetworkInfo(context);
return info != null && info.isConnected();
}
Как правило, он работает нормально, но в некоторых случаях он возвращается отключенным, хотя у меня есть соединение. После поиска, тестирования, проверки журналов я понял, что при низком заряде батареи устройства, если я запускаю приложение, функция возвращается отключенной, потому что ОС переводит систему в режим энергосбережения, а затем, если я изменяю подключение, приложение получает правильный ответ. , Более подробная информация доступна здесь в ответе @phil.
Кто-нибудь знает, как проверить соединение при включенном энергосбережении?!