network - wifi state android




Определите, есть ли доступ к Интернету на Android (4)

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

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

Вам также понадобятся:

в вашем манифестах Android.

Редактировать:

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

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

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

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

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

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

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

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

The constructor NetworkInfo is not visible.

Безопасная ставка - это еще один класс, который возвращает объект NetworkInfo . Но я не знаю, что.

  1. Как получить приведенный выше фрагмент кода?
  2. Как я мог найти информацию, необходимую мне в онлайн-документации?
  3. Можете ли вы предложить лучший способ для этого типа обнаружения?

Возможно, я нашел себя:

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

Метод getActiveNetworkInfo() ConnectivityManager возвращает экземпляр 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.

Редактировать:

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


Шаг 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-internet