Как обнаружить интернет соединение в андроид студии

У меня есть следующий код, чтобы определить, есть ли доступ к интернету или нет. Но если у меня нет подключения к интернету, только подключение для передачи данных включено, оно все еще работает. что я должен делать?

   ConnectivityManager cManager = (ConnectivityManager) getSystemService(this.CONNECTIVITY_SERVICE);


    NetworkInfo ninfo = cManager.getActiveNetworkInfo();


    if(ninfo!=null && ninfo.isConnected())

    {
      Toast.makeText(this, "Available",Toast.LENGTH_LONG).show();
    }

    else
    {
      Toast.makeText(this, "Not Available",Toast.LENGTH_LONG).show();
    }

2 ответа

Использовать этот NetworkUtils учебный класс:

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

public class NetworkUtils {

  private static int TYPE_WIFI = 1;
  private static int TYPE_MOBILE = 2;
  private static int TYPE_NOT_CONNECTED = 0;

  public static int getConnectivityStatus(Context context) {
    ConnectivityManager connectivityManager = (ConnectivityManager) context
        .getSystemService(Context.CONNECTIVITY_SERVICE);

    NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();

    if (networkInfo != null) {
      if (networkInfo.getType() == ConnectivityManager.TYPE_WIFI
          && networkInfo.getState() == NetworkInfo.State.CONNECTED) {

        return TYPE_WIFI;

      } else if (networkInfo.getType() == ConnectivityManager.TYPE_MOBILE
          && networkInfo.getState() == NetworkInfo.State.CONNECTED) {
        return TYPE_MOBILE;
      }
    }
    return TYPE_NOT_CONNECTED;
  }

  public static boolean isNetworkConnected(Context context) {
    int networkStatus = getConnectivityStatus(context);
    if (networkStatus == TYPE_WIFI || networkStatus == TYPE_MOBILE) {
      return true;
    } else {
      return false;
    }
  }
}

Используйте как это:

if(NetworkUtils.isNetworkConnected(this)){

}

Использовать ConnectivityManager учебный класс. Вот класс Java:

 ConnectivityManager manager =(ConnectivityManager) getApplicationContext()
                .getSystemService(Context.CONNECTIVITY_SERVICE);
 NetworkInfo activeNetwork = manager.getActiveNetworkInfo();
        if (null != activeNetwork) {
            if(activeNetwork.getType() == ConnectivityManager.TYPE_WIFI){
                //we have WIFI
            }
            if(activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE){
                //we have cellular data
            }
        } else{
            //we have no connection :(
        }

не забудьте попросить разрешения в AndroidManifest.xml:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
Другие вопросы по тегам