Как проверить, что сеть доступна или нет на устройстве Android, программно, которая выдает сообщение или сообщение тоста, когда мы пытаемся подключиться к сети, такой как Wi-Fi и 3G.
Android: проверка сети 3G или Wi-Fi включена или доступна или нет на устройстве Android
Ответ 1
Чтобы проверить, доступна ли сеть i.e 3G или WiFi, мы можем использовать ниже методы для проверки перед началом нашей деятельности.
ConnectivityManager manager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
//For 3G check
boolean is3g = manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE)
.isConnectedOrConnecting();
//For WiFi Check
boolean isWifi = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI)
.isConnectedOrConnecting();
System.out.println(is3g + " net " + isWifi);
if (!is3g && !isWifi)
{
Toast.makeText(getApplicationContext(),"Please make sure your Network Connection is ON ",Toast.LENGTH_LONG).show();
}
else
{
" Your method what you want to do "
}
Надеюсь, это поможет кому-то.
Ответ 2
final ConnectivityManager connMgr = (ConnectivityManager)
this.getSystemService(Context.CONNECTIVITY_SERVICE);
final android.net.NetworkInfo wifi =
connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
final android.net.NetworkInfo mobile =
connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
if( wifi.isAvailable() && wifi.getDetailedState() == DetailedState.CONNECTED){
Toast.makeText(this, "Wifi" , Toast.LENGTH_LONG).show();
}
else if( mobile.isAvailable() && mobile.getDetailedState() == DetailedState.CONNECTED ){
Toast.makeText(this, "Mobile 3G " , Toast.LENGTH_LONG).show();
}
else
{
Toast.makeText(this, "No Network " , Toast.LENGTH_LONG).show();
}
этот код проверяет, есть ли у вас Wi-Fi или 3g или ничего, в случае подключения к Wi-Fi, но не подключен к сети или 3g, проблема с сигналом обнаруживает эти детали, с подробной информацией
Ответ 3
Эта работа для меня
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
String name networkInfo.getTypeName();
Ответ 4
Этот метод можно использовать для проверки того, является ли ваше интернет-соединение 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;
}
Ответ 5
Используйте следующий код как NetworkChecker.java и повторно использовать его в коде:
package das.soumyadip.util;
import android.net.ConnectivityManager;
import android.util.Log;
public class NetworkChecker {
private final static String TAG = "NwtworkChecker";
public static boolean isNetworkConnected(
final ConnectivityManager connectivityManager) {
boolean val = false;
Log.d(TAG, "Checking for Mobile Internet Network");
final android.net.NetworkInfo mobile = connectivityManager
.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
if (mobile.isAvailable() && mobile.isConnected()) {
Log.i(TAG, "Found Mobile Internet Network");
val = true;
} else {
Log.e(TAG, "Mobile Internet Network not Found");
}
Log.d(TAG, "Checking for WI-FI Network");
final android.net.NetworkInfo wifi = connectivityManager
.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (wifi.isAvailable() && wifi.isConnected()) {
Log.i(TAG, "Found WI-FI Network");
val = true;
} else {
Log.e(TAG, "WI-FI Network not Found");
}
return val;
}
}
Ответ 6
// TODO Auto-generated method stub
ConnectivityManager connMgr =
(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
final android.net.NetworkInfo mobile = connectivityManager
.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
if (mobile.isAvailable() && mobile.isConnected()) {
Log.i(TAG, "Found Mobile Internet Network");
val = true;
}
// Checks the user prefs and the network connection. Based on the result, decides
// whether
// to refresh the display or keep the current display.
// If the userpref is Wi-Fi only, checks to see if the device has a Wi-Fi connection.
if (WIFI.equals(sPref) && networkInfo != null
&& networkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
// If device has its Wi-Fi connection, sets refreshDisplay
// to true. This causes the display to be refreshed when the user
// returns to the app.
refreshDisplay = true;
Toast.makeText(context, R.string.wifi_connected, Toast.LENGTH_SHORT).show();
// If the setting is ANY network and there is a network connection
// (which by process of elimination would be mobile), sets refreshDisplay to true.
}
}
else if (ANY.equals(sPref) && networkInfo != null) {
refreshDisplay = true;
// Otherwise, the app can't download content--either because there is no network
// connection (mobile or Wi-Fi), or because the pref setting is WIFI, and there
// is no Wi-Fi connection.
// Sets refreshDisplay to false.
} else {
refreshDisplay = false;
Toast.makeText(context, R.string.lost_connection, Toast.LENGTH_SHORT).show();
}
Ответ 7
Ответ Рахула Барадии включает manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE)
, и он устарел.
Ниже представлено улучшенное решение для новейшего Android SDK.
ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(CONNECTIVITY_SERVICE);
boolean is3gEnabled = false;
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Network[] networks = connManager.getAllNetworks();
for(Network network: networks)
{
NetworkInfo info = connManager.getNetworkInfo(network);
if(info!=null) {
if (info.getType() == ConnectivityManager.TYPE_MOBILE) {
is3gEnabled = true;
break;
}
}
}
}
else
{
NetworkInfo mMobile = connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
if(mMobile!=null)
is3gEnabled = true;
}
Ответ 8
Мы можем использовать класс ConnectivityManager для любой информации, связанной с сетью.
Он также уведомляет приложения, когда сетевая связь изменяется. Получить экземпляр этого класса, вызвав
Основные обязанности этого класса заключаются в следующем:
- Мониторинг сетевых подключений (Wi-Fi, GPRS, UMTS и т.д.).
- Отправлять трансляции при изменении сетевых подключений.
- Попытка "провалиться" в другую сеть при подключении к сети потеряно
- Предоставить API, который позволяет приложениям запрашивать крупнозернистые или мелкозернистые состояние доступных сетей
- Предоставить API, который позволяет приложениям запрашивать и выбирать сети для своих данных трафик
Функция GetNetworkInfo возвращает информацию о состоянии конкретной сети.
Этот метод требует, чтобы вызывающий абонент сохранял разрешение
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
/**
* Checks the type of data connection that is currently available on the device.
*
* @return <code>ConnectivityManager.TYPE_*</code> as a type of internet connection on the
*This method does not support multiple connected networks
* of the same type.
* device. Returns -1 in case of error or none of
* <code>ConnectivityManager.TYPE_*</code> is found.
**/
-
public static int getDataConnectionType(Context ctx) {
ConnectivityManager connectivityManager = (ConnectivityManager) ctx.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivityManager != null && connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE) != null) {
if (connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isConnected()) {
return ConnectivityManager.TYPE_MOBILE;
} else if (connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected()) {
return ConnectivityManager.TYPE_WIFI;
} else
return -1;
} else
return -1;
}
Ответ 9
ни в одном из приведенных выше кодов я не вижу проверки того, возвращает ли getNetworkInfo() значение null, которое происходит в соответствии с документами, когда запрашиваемый тип сети не поддерживается. это говорит о том, что на устройствах без 3g приложение будет разбиваться с использованием исключения с нулевым указателем.
Ответ 10
Я написал этот служебный класс специально для этого.
https://gist.github.com/nathan-fiscaletti/ee3e6a1825706b4196a992411e626bd4