У меня есть проверка подключения к Интернету, которая выглядит следующим образом:
public static boolean isInternetAvailable(Context ctx)
{
NetworkInfo info = ((ConnectivityManager) ctx.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();
if (info == null || !info.isConnected()) return false;
if (info.isRoaming())
{
return Preferences.getIsRoamingAllowed(ctx);
}
return true;
}
До сих пор он работал хорошо для всех установок. Сегодня пользователь пришел с телефоном, где все работало (браузер, электронная почта и т.д.), И он не роуминг. Но мое приложение из-за этой проверки давало ошибку "Нет соединения".
Телефон HTC Droid ERIS с 2.1
Кто-нибудь видел эту проблему? Почему?
Хорошо, я написал тестовое приложение, которое получает сеть activenetwork и все сети и позволяет мне видеть, что происходит, я собираюсь выйти и проверить это, так как аномалии, которые я вижу, происходят при переключении с одной сети на другую (например, когда вы выходите из диапазона Wi-Fi и в cdma и т.д.),
Пара вещей, которые могут помочь независимо от того, вы сначала можете изменить info.isConnected на следующее
if (info == null || !info.isConnectedOrConnecting()) return false;
Это делает его немного более надежным в том, что если вы находитесь в середине переключения, вы все равно позволяете пользователю входить в систему
Во-вторых, вы сказали, что ваше приложение запретило вход в систему, если вы роуминге, потому что ваши приложения разрешают настройку роуминга в значение false
return Preferences.getIsRoamingAllowed(ctx);
Я думаю, вам нужно сначала придерживаться другой схемы (только мое мнение), потому что если пользователь запретил роуминг через свои настройки (телефон не ваше приложение), и они находятся в роуминговой сети, то.getActiveNetwork() вернет null или нет подключен или недоступен (в этом случае.getReason возвращает "noroaming")
Лично я бы позволил телефону решить, но если вам нужно его ограничить, тогда он будет следовать примеру
Установите значение по умолчанию равным true, но обратите внимание, что это при первом запуске вашей активности, и у пользователя не было возможности установить что-либо (поскольку префикс не установлен, это должно быть достаточно простым для обнаружения). Обнаружение сетевого подключения, если у вас есть один то также обратите внимание, если они роуминг
Подскажите им диалог предупреждения, который предупреждает их, что они в настоящее время находятся в роуминге, и спросите их, хотят ли они сейчас зарегистрироваться или дождитесь позже
ИЛИ
Обычный вход, если они не роуминг
Но в любом случае предложите им возможность установить опцию "роуминг" в первый раз, вместо того, чтобы самим понять это.
Это будет касаться ситуации с вашим уловом 22 и сэкономить вам некоторые телефонные звонки, так или иначе, что дизайнерское решение, но я думаю, что это будет лучше для вас, чем ваш текущий шаблон.
Кроме того, я думаю, вместо того, чтобы просто сказать им, что нет связи, вы можете сказать им, почему, верните enum вместо логического, а затем и формат, зависящий от этого.
Наконец, я собираюсь проверить немного больше до моего окончательного ответа, потому что я вижу некоторую странность в состоянии сети, но хочу подтвердить свои выводы, прежде чем давать вам результаты, мне это нужно, поэтому мне было хорошо провести время в это.