Как определить Android-соединение с интернетом? - PullRequest
7 голосов
/ 15 ноября 2009

Как определить текущий тип интернет-соединения, доступный для устройства Android? например вернуть WiFi, 3G, нет.

Ответы [ 4 ]

7 голосов
/ 23 августа 2011

Вы можете использовать это, чтобы определить, подключены ли вы:

final ConnectivityManager connectManager = (ConnectivityManager)ctx.getSystemService(Context.CONNECTIVITY_SERVICE); // ctx stands for the Context
final NetworkInfo mobile = connectManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
final NetworkInfo wifi   = connectManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI  );

// Return true if connected, either in 3G or wi-fi
return ((mobile != null && mobile.getState() == NetworkInfo.State.CONNECTED) || 
        (wifi   != null && wifi.getState()   == NetworkInfo.State.CONNECTED)   );
}

Этот код требует разрешения ACCESS_NETWORK_STATE и ACCESS_WIFI_STATE.

EDIT : public NetworkInfo getNetworkInfo (int networkType) устарел в API 21 . Для уровней API выше 20 вы можете сделать следующее:

final Network[] networks = connectManager.getAllNetworks();
boolean connected = false;

for (int ctr = 0; !connected && ctr < networks.length; ++ctr) {
    final NetworkInfo network = connectManager.getNetworkInfo(networks[ctr]);
    final int netType = network.getType();

    connected = (network.getState() == NetworkInfo.State.CONNECTED) &&
            (
                netType == ConnectivityManager.TYPE_MOBILE     ||
                netType == ConnectivityManager.TYPE_WIFI     /*||
                netType == ConnectivityManager.TYPE_WIMAX      ||
                netType == ConnectivityManager.TYPE_ETHERNET */  );
}

return connected;

Я ограничил этот код Wi-Fi и 3G в соответствии с вопросом OP, но его легко расширить на недавно добавленные типы подключения, такие как Ethernet или Wi-Max.

2 голосов
/ 23 августа 2011

Не знаю, почему ваше приложение падает, возможно, это поможет. Может быть, попробуйте этот метод: (нужен контекст приложения)

 public static boolean isInternetConnectionActive(Context context) {
  NetworkInfo networkInfo = ((ConnectivityManager) context
    .getSystemService(Context.CONNECTIVITY_SERVICE))
    .getActiveNetworkInfo();

  if(networkInfo == null || !networkInfo.isConnected()) {
   return false;
  }
  return true;
 }

тогда попробуй позвонить

if(isInternetConnectionActive(getApplicationContext)) {
 /* start Intent */
}
else {
  /* show Toast */
}

надеюсь, это поможет

1 голос
/ 30 апреля 2011

см. Этот пост, я ответил на тот же вопрос как сохранить запрос и отправить в приложение для Android

0 голосов
/ 16 ноября 2009

Вы также можете использовать TelephonyManager , чтобы узнать тип мобильной сети:

TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
int networkType = telephonyManager.getNetworkType();

Возможные типы сетей перечислены в http://developer.android.com/reference/android/telephony/TelephonyManager.html#getNetworkType%28%29

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...