Обнаружить, есть ли подключение к Интернету на Android [дубликат]


Возможные Дубликаты:
Как проверить доступ в интернет на Android? InetAddress никогда не тайм-ауты

мне нужно определить, подключено ли устройство Android к интернету.

The NetworkInfo класс предоставляет нестатический метод isAvailable() - звучит прекрасно.

проблема в том, что:

NetworkInfo ni = new NetworkInfo();
if (!ni.isAvailable()) {
    // do something
}

выдает это ошибка:

The constructor NetworkInfo is not visible.

Безопасная ставка есть еще один класс что возвращает

6 587

6 ответов:

The getActiveNetworkInfo() метод ConnectivityManager возвращает a NetworkInfo экземпляр, представляющий первый подключенный сетевой интерфейс, который он может найти или null если ни один из интерфейсов соединяются. Проверка, если этот метод возвращает null должно быть достаточно, чтобы сказать, если подключение к интернету или нет.

private boolean isNetworkAvailable() {
    ConnectivityManager connectivityManager 
          = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
    return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}

вы должны:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

в вашем манифесте android.

Edit:

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

Я проверяю как для Wi-fi, так и для мобильного интернета следующим образом...

private boolean haveNetworkConnection() {
    boolean haveConnectedWifi = false;
    boolean haveConnectedMobile = false;

    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo[] netInfo = cm.getAllNetworkInfo();
    for (NetworkInfo ni : netInfo) {
        if (ni.getTypeName().equalsIgnoreCase("WIFI"))
            if (ni.isConnected())
                haveConnectedWifi = true;
        if (ni.getTypeName().equalsIgnoreCase("MOBILE"))
            if (ni.isConnected())
                haveConnectedMobile = true;
    }
    return haveConnectedWifi || haveConnectedMobile;
}

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

Шаг 1: Создайте класс AppStatus в своем проекте (вы также можете дать любое другое имя). Затем вставьте приведенные ниже строки в свой код:

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.util.Log;


public class AppStatus {

    private static AppStatus instance = new AppStatus();
    static Context context;
    ConnectivityManager connectivityManager;
    NetworkInfo wifiInfo, mobileInfo;
    boolean connected = false;

    public static AppStatus getInstance(Context ctx) {
        context = ctx.getApplicationContext();
        return instance;
    }

    public boolean isOnline() {
        try {
            connectivityManager = (ConnectivityManager) context
                        .getSystemService(Context.CONNECTIVITY_SERVICE);

        NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
        connected = networkInfo != null && networkInfo.isAvailable() &&
                networkInfo.isConnected();
        return connected;


        } catch (Exception e) {
            System.out.println("CheckConnectivity Exception: " + e.getMessage());
            Log.v("connectivity", e.toString());
        }
        return connected;
    }
}

Шаг 2: Теперь, чтобы проверить, есть ли у вашего устройства сетевое подключение, просто добавьте этот фрагмент кода, где бы вы ни хотели проверить ...

if (AppStatus.getInstance(this).isOnline()) {

    Toast.makeText(this,"You are online!!!!",8000).show();

} else {

    Toast.makeText(this,"You are not online!!!!",8000).show();
    Log.v("Home", "############################You are not online!!!!");    
}

еще одно важное замечание. Вы должны установить android.permission.ACCESS_NETWORK_STATE в вашем AndroidManifest.xml для этого работает.

_ Как я мог найти нужную мне информацию в онлайн-документации?

вам просто нужно прочитать документацию по классам достаточно правильно, и вы найдете все ответы, которые вы ищете. Ознакомьтесь с документацией по . Описание говорит вам, что делать.

метод getActiveNetworkInfo () ConnectivityManager возвращает a Экземпляр NetworkInfo, представляющий первую подключенную сеть интерфейс он может найти или null, если нет, если интерфейсы подключены. Проверка, если этот метод возвращает null должно быть достаточно, чтобы сказать, если предоставляется доступ в интернет.

private boolean isNetworkAvailable() {
     ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
     NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
     return activeNetworkInfo != null; 
}

вы должны:

в вашей манифест android.

Edit:

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

getActiveNetworkInfo () никогда не должен давать null. Я не знаю, что это было. думал, когда они это придумали. Он должен дать вам объект всегда.

наверное, я нашел себя:

ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
return connectivityManager.getActiveNetworkInfo().isConnectedOrConnecting();