Проверить статус интернета из основного действия

Я новый студент по разработке Android, поэтому у меня недостаточно опыта для кодирования, поэтому мне нужна ваша помощь ... Я создаю класс java в студии Android, чтобы проверить, есть ли подключение к Интернету или нет:

import android.app.Activity;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.util.Log;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;


public class InternetStatus {
private static final String LOG_TAG ="InternetStatus";
public static boolean hasActiveInternetConnection(Context context) {
    if (isNetworkAvailable((Activity) context)) {
        try {
            HttpURLConnection urlc = (HttpURLConnection) (new     URL("http://www.google.com").openConnection());
            urlc.setRequestProperty("User-Agent", "Test");
            urlc.setRequestProperty("Connection", "close");
            urlc.setConnectTimeout(1500);
            urlc.connect();
            return (urlc.getResponseCode() == 200);
        } catch (IOException e) {
            Log.e(LOG_TAG, "Error checking internet connection", e);
        }
    } else {
        Log.d(LOG_TAG, "No network available!");
    }
    return false;
}
public static boolean isNetworkAvailable(Activity mActivity) {
    Context context = mActivity.getApplicationContext();
    ConnectivityManager connectivity = (ConnectivityManager) context
            .getSystemService(Context.CONNECTIVITY_SERVICE);
    if (connectivity == null) {
        return false;
    } else {
        NetworkInfo[] info = connectivity.getAllNetworkInfo();
        if (info != null) {
            for (int i = 0; i < info.length; i++) {
                if (info[i].getState() == NetworkInfo.State.CONNECTED) {
                    return true;
                }
            }
        }
    }
    return false;
}


}

Итак, у меня два вопроса:

1- это правильный код или я что-то упускаю?

2- как вы видите, это класс java, если я создам кнопку в своем основном действии, чтобы проверить, есть ли подключение к Интернету или нет !! как я могу это сделать, импортировав этот класс или что-то в этом роде? !!


person mohamd jado    schedule 27.01.2015    source источник


Ответы (6)


// Check if there is any connectivity for a Wifi network
public boolean isConnectedWifi(){
    NetworkInfo info = Connectivity.getNetworkInfo(Context);
    return info != null && info.isConnected() && info.getType() == ConnectivityManager.TYPE_WIFI;
}

// Check if there is any connectivity for a mobile network
public boolean isConnectedMobile(){
    NetworkInfo info = Connectivity.getNetworkInfo(Context);
    return info != null && info.isConnected() && info.getType() == ConnectivityManager.TYPE_MOBILE;
}

// Check all connectivities whether available or not
public boolean isNetworkAvailable() {
    ConnectivityManager cm = (ConnectivityManager) 
      getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo networkInfo = cm.getActiveNetworkInfo();
    return networkInfo != null && networkInfo.isConnected();
}

Как пользоваться?

Например, нам нужно проверить, доступно ли подключение:

if(isNetworkAvailable()){
    // do your thing here.
}

Когда сеть доступна, нам нужно проверить, Wi-Fi это или мобильная сеть:

if(isConnectedWifi()){
    // do your thing here with WiFi Network.
}

if(isConnectedMobile()){
    // do your thing here with Mobile Network.
}
person Anggrayudi H    schedule 27.01.2015
comment
спасибо братан :) это лучший ответ (Y), и он работает на 100%, но здесь чего-то не хватает, а именно класса Connectivity, вам нужно его построить, и я гуглил и вижу класс здесь: (stackoverflow.com/questions/2802472/) - person mohamd jado; 27.01.2015
comment
Я хочу проголосовать за ваш ответ, но у меня недостаточно репутации :( - person mohamd jado; 27.01.2015
comment
Спасибо за информацию о пропавшем. Возьми у меня +1. - person Anggrayudi H; 28.01.2015

Прежде всего, вы должны включить запрос разрешения в AndroidManifest.xml

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

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

public static boolean isInternetConnected(Context context) {
    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();

    return activeNetwork != null && activeNetwork.isConnectedOrConnecting();
}
person Silvio Delgado    schedule 12.09.2015
comment
Мне не хватало запроса на разрешение. Спасибо! - person Real; 12.09.2015

В вашем MainActivity классе

@Override
protected void onCreate (Bundle savedInstanceState) {

super.onCreate (savedInstanceState);
    setContentView (R.layout.activity_camera);
     boolean isavailable = InternetStatus.hasActiveInternetConnection(getApplicationContext);
    }
}

если у вас есть кнопка

boolean isavailable ;
@Override
protected void onCreate (Bundle savedInstanceState) {

super.onCreate (savedInstanceState);
    setContentView (R.layout.activity_camera);
     Button someButton = (Button) findViewById(R.id.yourButton);
     someButton.setOnClickListener(new onClickLIstener(){
               isavailable = InternetStatus.hasActiveInternetConnection(getApplicationContext);
     });
    }
}
person Murtaza Khursheed Hussain    schedule 27.01.2015

Чтобы проверить статус подключения, не нужно подключаться к Интернету и получать код статуса. Используйте приведенный ниже код.

public boolean isConnected() {
    ConnectivityManager manager = (ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE);
    NetworkInfo info = manager.getActiveNetworkInfo();
    if (info != null && info.isConnected()) {
        return true;
    } else {
        return false;

    }
}

Что вернет истину или ложь в зависимости от активного статуса сети.

При нажатии кнопки просто вызовите эту функцию. Если она вернет true, соединение установлено. Если он возвращает false, активное подключение к Интернету отсутствует.

person Vilas    schedule 27.01.2015

Просто поместите info.isConnected () в свою функцию isNetworkAvailable:

  public static boolean isNetworkAvailable(Activity mActivity) {
            ...
        if (connectivity == null) {
            return false;
        } else {
            NetworkInfo[] info = connectivity.getAllNetworkInfo();
                if (info != null && info.isConnected()) {
                    ...
                    }
                }
            }
            return false;
        }
person arpit    schedule 27.01.2015

Большинство ответов устарело

    fun isNetworkAvailable(context : Context): Boolean {
        val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
        if (isAndroidVersionAboveLollipop()) {
            val activeNetwork = connectivityManager.activeNetwork ?: return false
            val networkCapabilities = connectivityManager.getNetworkCapabilities(activeNetwork) ?: return false
            networkCapabilities.let {
                return it.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) && it.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)
            }
        } else {
              return connectivityManager.activeNetworkInfo?.isConnectedOrConnecting ?: false
         }
    }

    fun isAndroidVersionAboveLollipop() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
person San    schedule 15.05.2020