Как проверить Wi-Fi или сеть 3g можно на Android-устройстве

Здесь мое устройство Android поддерживает как Wi-Fi, так и 3g. В определенное время, какая сеть доступна на этом устройстве. Поскольку мое требование – когда доступно 3g, я должен загрузить небольшой объем данных. Когда Wi-Fi доступен, все данные должны загружаться. Итак, я должен проверить соединение wifi или 3g. Пожалуйста, помогите мне. Заранее спасибо.

Я использую это:

/** * Checks if we have a valid Internet Connection on the device. * @param ctx * @return True if device has internet * * Code from: http://www.androidsnippets.org/snippets/131/ */ public static boolean haveInternet(Context ctx) { NetworkInfo info = (NetworkInfo) ((ConnectivityManager) ctx .getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo(); if (info == null || !info.isConnected()) { return false; } if (info.isRoaming()) { // here is the roaming option you can change it if you want to // disable internet while roaming, just return false return false; } return true; } 

Вам также нужно

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

В AndroidMainfest.xml

Чтобы получить тип сети, вы можете использовать этот фрагмент кода:

 ConnectivityManager conMan = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); //mobile State mobile = conMan.getNetworkInfo(0).getState(); //wifi State wifi = conMan.getNetworkInfo(1).getState(); 

И затем используйте его так:

 if (mobile == NetworkInfo.State.CONNECTED || mobile == NetworkInfo.State.CONNECTING) { //mobile } else if (wifi == NetworkInfo.State.CONNECTED || wifi == NetworkInfo.State.CONNECTING) { //wifi } 

Чтобы получить тип мобильной сети, я бы попробовал TelephonyManager # getNetworkType или NetworkInfo # getSubtypeName

Вам нужно добавить разрешение ниже в файле манифеста android:

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

После этого вы можете использовать ниже функции для проверки подключения Wi-Fi или мобильной сети или нет

 public static boolean isWifiConnected(Context context) { ConnectivityManager connManager = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo netInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); return ((netInfo != null) && netInfo.isConnected()); } public static boolean isMobileConnected(Context context) { ConnectivityManager connManager = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo netInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); return ((netInfo != null) && netInfo.isConnected()); } 

Некоторые ссылки от developer.android.com:

  1. https://developer.android.com/reference/android/net/ConnectivityManager.html
  2. https://developer.android.com/reference/android/net/NetworkInfo.html
  3. https://developer.android.com/reference/android/net/ConnectivityManager.html#getActiveNetworkInfo ()

Сначала получите ссылку на ConnectivityManager, а затем проверьте состояние Wi-Fi и 3G устройства. Для использования этой службы вам потребуется разрешение ACCESS_NETWORK_STATE.

  ConnectivityManager connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); NetworkInfo mMobile = connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); if (mWifi.isAvailable() == true) { return "Connected to WiFi"; } else if (mMobile.isAvailable() == true) { return "Connected to Mobile Network"; } else return "No internet Connection" 

Вы можете использовать этот метод, чтобы проверить, является ли ваше интернет-соединение 2G, 3G или 4G :

 public String getNetworkClass(Context context) { TelephonyManager mTelephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); int networkType = mTelephonyManager.getNetworkType(); switch (networkType) { case TelephonyManager.NETWORK_TYPE_GPRS: case TelephonyManager.NETWORK_TYPE_EDGE: case TelephonyManager.NETWORK_TYPE_CDMA: case TelephonyManager.NETWORK_TYPE_1xRTT: case TelephonyManager.NETWORK_TYPE_IDEN: return "2G"; case TelephonyManager.NETWORK_TYPE_UMTS: case TelephonyManager.NETWORK_TYPE_EVDO_0: case TelephonyManager.NETWORK_TYPE_EVDO_A: case TelephonyManager.NETWORK_TYPE_HSDPA: case TelephonyManager.NETWORK_TYPE_HSUPA: case TelephonyManager.NETWORK_TYPE_HSPA: case TelephonyManager.NETWORK_TYPE_EVDO_B: case TelephonyManager.NETWORK_TYPE_EHRPD: case TelephonyManager.NETWORK_TYPE_HSPAP: return "3G"; case TelephonyManager.NETWORK_TYPE_LTE: return "4G"; default: return "Unknown"; } } 

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

 public String getNetworkType(Context context){ String networkType = null; ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetwork = connectivityManager.getActiveNetworkInfo(); if (activeNetwork != null) { // connected to the internet if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) { networkType = "WiFi"; } else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) { networkType = "Mobile"; } } else { // not connected to the internet } return networkType; } 
Intereting Posts
Как показать статус индикатора выполнения в процентах Android Paint setShadowLayer () игнорирует цвет его Paint Сброс выбора устройства для выбора устройства Какой-нибудь быстрый эмулятор для Android? Это боль, чтобы развиваться с использованием эмулятора по умолчанию Android Как создать Vcard выбранного контакта из приложения «Контакты по умолчанию» Android ExifInterface saveAttributes () без перезаписи предыдущих данных? Вызов findViewById в фрагменте, чтобы найти кнопку, возвращает null Ошибка удаления камеры Android от PreviewCallback Фильтр сканирования Bluetooth LE не работает Как использовать URLEncoder с UTF-8 Android: Как я могу помешать мягкой клавиатуре выдвинуть мой взгляд? Как отобразить многострочный список массивов в одиночном TextView? Поддерживает ли Android API для определения дней выходных дней, которые знают локали? Android Studio 2.2 не упаковывает стороннюю библиотеку в apk Как установить вес для включенных макетов?