Android - нет подключения для моего приложения. Как отлаживать?

1

У меня есть проверка подключения к Интернету, которая выглядит следующим образом:

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

Кто-нибудь видел эту проблему? Почему?

  • 0
    Если вы хотите дать мне apk отладки с выходами журнала, у меня есть дроид Eris с 2.1 для тестирования. Также вы говорите, что знаете, что он возвращается в роуминге, если / тогда?
  • 0
    Это проблема. Я не знаю, что это возвращается в роуминге. И в моих предпочтениях я по умолчанию установил НЕТ роуминга. Так что это как уловка 22. Он не вошел в систему, чтобы изменить настройки, и он не может войти. Но сам телефон не показывает, что он в роуминге. Вы можете скачать мое приложение с маркета com.idatt - там должна быть отладка. Просто попробуйте любой UN / PW - если у вас нет подключения - он даже не попытается подключиться
Показать ещё 2 комментария
Теги:

1 ответ

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 вместо логического, а затем и формат, зависящий от этого.

Наконец, я собираюсь проверить немного больше до моего окончательного ответа, потому что я вижу некоторую странность в состоянии сети, но хочу подтвердить свои выводы, прежде чем давать вам результаты, мне это нужно, поэтому мне было хорошо провести время в это.

  • 0
    Отличная информация! То, что вы сказали о предпочтениях - на месте. Я не уверен, что я думал. Действительно, если я получу NULL, когда настройки телефона будут препятствовать роумингу, мне даже не понадобится эта опция. Да, для пользователя лучше решить и установить по телефону. Я буду следить за тем, что вы узнаете об этом телефоне ..

Ещё вопросы

Сообщество Overcoder
Наверх
Меню