самый быстрый способ проверить доступ в Интернет в android

Я создаю приложение, которое помогает настроить параметры WIFI на Android, и мне нужен самый быстрый способ проверить подключение к Интернету. Рабочее соединение - подключено не только WIFI!

Я использую этот код

URL url = new URL("http://www.google.com");
                                final HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
                                urlc.setRequestProperty("User-Agent", "Android Application");
                                urlc.setRequestProperty("Connection", "close");
                                        urlc.setConnectTimeout(3 * 1000);
                                        urlc.connect();

                                        if (urlc.getResponseCode() == 200) {//Good response



                                        } else { 
                                        //bad   

                                        }
                                    } catch (IOException e) {
                                         //bad
                                    }

но требуется много времени, чтобы получить ответ, около 20 секунд (хотя тайм-аут составляет 3 секунды?). Есть ли более быстрый способ сделать это?

1
nl ja de
goto this android «> stackoverflow.com/questions/12889750/…
добавлено автор Rahul Baradia, источник
@ user1591982 Помог ли мой ответ в любом случае?
добавлено автор kaderud, источник
@ user1591982 Какие ошибки вы получаете, если таковые имеются? Я тестировал этот код сбоку и назад :-), и он до сих пор ловит все случаи. (android 4.x)
добавлено автор kaderud, источник
Нет извините. Тот же результат. Но большое спасибо за ответ!
добавлено автор user1591982, источник
Нет ошибок, но если нет доступа в Интернет, требуется полминуты, чтобы исключить исключение, даже если тайм-аут установлен на 5 секунд.
добавлено автор user1591982, источник

2 ответы

Просто используйте метод ниже, прежде чем выполнять вызов сервера:

public static boolean isOnline() {

    try {
        ConnectivityManager cm = (ConnectivityManager) Const.CONTEXT
                .getSystemService(Context.CONNECTIVITY_SERVICE);

        if (cm != null) {
            return cm.getActiveNetworkInfo().isConnectedOrConnecting();
        } else {
            return false;
        }
    } catch (Exception e) {
        return false;
    }
}
1
добавлено
да ты прав
добавлено автор Bhavdip Sagar, источник
это хорошо протестированный код, но убедитесь, что вы пытаетесь получить доступ, который может быть недоступен или нет, убедитесь, что в моем коде выше Const.Context вы используете контекст, если бы использовали свой контекст.
добавлено автор Bhavdip Sagar, источник
@Bhavdip Pathar Этот код не проверяет, подключено ли устройство к Интернету, ТОЛЬКО, если оно подключено к сети, например, UMTS или WiFi. Ознакомьтесь с документами API: developer.android.com/reference/android/net/&hellip ;
добавлено автор kaderud, источник
если он возвращает true, устройство имеет доступ к Интернету?
добавлено автор user1591982, источник
он возвращает true, даже если нет доступа в Интернет
добавлено автор user1591982, источник
Он говорит, что подключен, пока устройство подключено к беспроводной сети, и мне нужно, чтобы проверить, есть ли доступ к WWW
добавлено автор user1591982, источник

Your code looks fine, perhaps it would work better if you also added urlc.setReadTimeout(TIME_OUT);

Ниже приведен код, который я использую, и он до сих пор обнаружил различные сценарии подключения WiFi/Mobile, но не Интернет и так далее.

public boolean isNetworksAvailable() {
    ConnectivityManager mConnMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    if (mConnMgr != null)  {
        NetworkInfo[] mNetInfo = mConnMgr.getAllNetworkInfo();
        if (mNetInfo != null) {
            for (int i = 0; i < mNetInfo.length; i++) {
                if (mNetInfo[i].getState() == NetworkInfo.State.CONNECTED) {
                    return true;
                }
            }
        }
    }
    return false;
}

What this code does is loop thru all the Network states to make sure it finds a CONNECTED state, only then is isNetworksAvailable()

В isInternetConnected мы проверяем, можем ли мы сделать простую HTTP-связь.

public boolean isInternetConnected(String mUrl) {
    final int CONNECTION_TIMEOUT = 2000;
    if (isNetworksAvailable()) {
        try {
            HttpURLConnection mURLConnection = (HttpURLConnection) (new URL(mUrl).openConnection());
            mURLConnection.setRequestProperty("User-Agent", "ConnectionTest");
            mURLConnection.setRequestProperty("Connection", "close");
            mURLConnection.setConnectTimeout(CONNECTION_TIMEOUT);
            mURLConnection.setReadTimeout(CONNECTION_TIMEOUT);
            mURLConnection.connect();
            return (mURLConnection.getResponseCode() == 200);
        } catch (IOException ioe) {
            Log.e("isInternetConnected", "Exception occured while checking for Internet connection: ", ioe);
        }
    } else {
        Log.e("isInternetConnected", "Not connected to WiFi/Mobile and no Internet available.");
    }
    return false;
}

Этот код следует использовать в AsyncTask или иначе вам нужно использовать его со следующим кодом, например, в onCreate() (Но настоятельно рекомендуется использовать AsyncTask вместо создания сети в потоке пользовательского интерфейса)

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);

Проверьте, подключен ли к Интернету:

if (isInternetConnected("http://www.google.com")) {
    showToast("Internet connected");
} else {
    showToast("No connection to the Internet!");
}
0
добавлено
Mobile Dev Jobs — вакансии и аналитика
Mobile Dev Jobs — вакансии и аналитика
6 187 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin и т.д. ВАЖНО: Правила публикации и правила канала: Ссылка – https://telegra.ph/Pravila-oformleniya-vakansij-i-rezyume-11-09-2

Android Developers
Android Developers
4 476 участник(ов)

Общаемся на темы, посвященным Android-разработке, SDK, Kotlin, Realm и т.д.

Android Architecture
Android Architecture
2 186 участник(ов)

Русскоязычный чат по архитектуре в андроид приложениях. Подробнее: http://telegra.ph/Android-Architecture-12-24

rus-speaking/android
rus-speaking/android
1 705 участник(ов)

Основной чат по Android разработке (вопрос-ответ). ПРАВИЛА: bit.ly/andr-rules. NEWS: bit.ly/AnrdResId ЧАТЫ: Основной: bit.ly/andr-main IDE, сборка, Git, сервисы: bit.ly/andr-tools Оффтоп: bit.ly/andr-offtop Конференции, события: bit.ly/andr-events Вакансии, найм: bit.ly/andr-job Архитектура: bit.ly/andr-patterns Rx: bit.ly/andr-rx Тестирование: bit.ly/andr-test Kotlin: bit.ly/andr-kotlin Хаmarin: bit.ly/andr-xamarin За мат, спам, агрессию, предложения о работе, оффтоп в этом канале - бан на сутки и более ☢☢☢

Android Dev Подкаст
Android Dev Подкаст
1 325 участник(ов)

Комната для обсуждения Android Dev подкаста apptractor.ru/AndroidDev/ Общее обсуждение Android: https://t.me/android_ru Остальные чаты про Android: http://t.me/devChats Наши новости https://t.me/androiddevpodcast_news

Android Guards
Android Guards
602 участник(ов)

Обсуждение любых вопросов касающихся безопасности Android. - Защита системы и приложений - Уязвимости и эксплойты - Вредоносное ПО - Копание в кишках системы и приложений (RE)

Android JOB
Android JOB
466 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению Android (full-time, part-time, remote и разовые подработки)

AndroidDev :: Разработка. It's Android time now!
AndroidDev :: Разработка. It's Android time now!
458 участник(ов)

It's Android time now! Чат разработчиков Android. Вакансии, резюме и информацию о митапах размещать можно. Публикацию скрытой и явной рекламы ваших каналов и сайтов после получения разрешения от @olegushakov

EvilWirelessChat
EvilWirelessChat
226 участник(ов)

Группа русскоязычных специалистов по беспроводным сетям. Мат, шуточки за триста, два стула и прочий трешак разрешены исключительно в рамках обсуждения технических деталей. Троллинг разрешен. Прямые оскорбления запрещены.

Aandroid Talks!
Aandroid Talks!
212 участник(ов)

Чат об общих вопросах по ОС Android. Чат для разработки под андроид - pro.android: https://t.me/joinchat/AAAAAEKIFKnmRT9cMebb9w

Android Rus
Android Rus
68 участник(ов)