Как узнать, подключен ли Wi-Fi на Android?

237

Я не хочу, чтобы мой пользователь даже пытался что-то скачать, если у него не подключен Wi-Fi. Тем не менее, я могу только сказать, что Wi-Fi включен, но у них все еще может быть соединение 3G.

android.net.wifi.WifiManager m = (WifiManager) getSystemService(WIFI_SERVICE);
android.net.wifi.SupplicantState s = m.getConnectionInfo().getSupplicantState();
NetworkInfo.DetailedState state = WifiInfo.getDetailedStateOf(s);
if (state != NetworkInfo.DetailedState.CONNECTED) {
    return false;
}

Тем не менее, состояние не то, что я ожидал. Хотя Wi-Fi подключен, я получаю OBTAINING_IPADDRкак государство.

Натан Шверманн
источник

Ответы:

463

Вы должны иметь возможность использовать ConnectivityManager, чтобы получить состояние адаптера Wi-Fi. Оттуда вы можете проверить, если он подключен или даже доступен .

ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

if (mWifi.isConnected()) {
    // Do whatever
}

ПРИМЕЧАНИЕ: следует отметить (для нас здесь), что вам нужно добавить

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

на ваш

AndroidManifest.xml для этого, чтобы работать.

ПРИМЕЧАНИЕ2 : public NetworkInfo getNetworkInfo (int networkType)теперь не рекомендуется:

Этот метод устарел на уровне API 23. Этот метод не поддерживает несколько подключенных сетей одного типа. Вместо этого используйте getAllNetworks () и getNetworkInfo (android.net.Network).

ПРИМЕЧАНИЕ3 : public static final int TYPE_WIFIтеперь не рекомендуется:

Эта константа устарела на уровне API 28. Приложения должны вместо этого использовать NetworkCapabilities.hasTransport (int) или requestNetwork (NetworkRequest, NetworkCallback) для запроса соответствующей сети. для поддерживаемых перевозок.

Джейсон Найт
источник
72
Следует отметить (для нас новичков здесь), что вам нужно добавить android.permission.ACCESS_NETWORK_STATEв ваш AndroidManifest.xml, чтобы это работало.
мгалгс
10
В самых последних версиях Android вам нужно проверить NULL в mWiFi ... ваш код может выдать ошибку нулевого указателя. См developer.android.com/training/basics/network-ops/managing.html и , в частности , "Метод getActiveNetworkInfo () возвращает NetworkInfo ..."
eb80
1
У меня это работало и с интерфейсом Ethernet. Я только что перешел на ConnectivityManager.TYPE_ETHERNET
MBH
3
Метод NetworkInfo.isConnected () теперь устарел в API-23. Я публикую решение ниже.
революционный
1
NetworkInfo.getType () и ConnectivityManager.TYPE_WIFI теперь не поддерживаются в API 28. Чтобы избежать предупреждения о задержке, вы должны использовать что-то вродеconnectivityManager.getNetworkCapabilities(network).hasTransport(NetworkCapabilities.TRANSPORT_WIFI)
Vadik
75

Поскольку метод NetworkInfo.isConnected () теперь не поддерживается в API-23 , вот метод, который определяет, включен ли адаптер Wi-Fi, а также подключен к точке доступа, используя вместо этого WifiManager:

private boolean checkWifiOnAndConnected() {
    WifiManager wifiMgr = (WifiManager) getSystemService(Context.WIFI_SERVICE);

    if (wifiMgr.isWifiEnabled()) { // Wi-Fi adapter is ON

        WifiInfo wifiInfo = wifiMgr.getConnectionInfo();

        if( wifiInfo.getNetworkId() == -1 ){
            return false; // Not connected to an access point
        }
        return true; // Connected to an access point
    }
    else {
        return false; // Wi-Fi adapter is OFF
    }
}
революционер
источник
4
Стоит отметить, что wifiInfo может быть нулевым, поэтому я думаю, что вы должны проверить на нулевое значение, прежде чем получить идентификатор сети
Nonos
2
NetworkInfo.isConnected()не выглядит оскорбленным для меня.
EricRobertBrewer
Не забудьте добавить разрешение:android.permission.ACCESS_WIFI_STATE
Ton Snoei
1
Это больше не будет работать в Android Q без разрешения местоположения и включения режима местоположения, см. Issetracker.google.com/issues/136021574 .
Консумьер
@EricRobertBrewer комментарий больше не актуален. это сейчас устарел API 29+.
НУК
35

Я просто использую следующее:

SupplicantState supState; 
wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
supState = wifiInfo.getSupplicantState();

Который вернет одно из этих состояний во время вызова getSupplicantState ();

ОБЪЕДИНЕНО - Ассоциация завершена.

ОБЪЕДИНЕНИЕ - Попытка связаться с точкой доступа.

ЗАВЕРШЕНО - Все аутентификации завершены.

DISCONNECTED - это состояние указывает, что клиент не связан, но, вероятно, начнет искать точку доступа.

DORMANT - добавленное в Android состояние, которое сообщается, когда клиент выполняет явную команду DISCONNECT.

FOUR_WAY_HANDSHAKE - Идет процесс четырехстороннего рукопожатия WPA.

GROUP_HANDSHAKE - Идет рукопожатие ключа группы WPA.

НЕАКТИВНО - Неактивное состояние.

INVALID - псевдо-состояние, которое обычно никогда не должно быть видно.

СКАНИРОВАНИЕ - Сканирование сети.

UNINITIALIZED - Нет связи.

Донал Рафферти
источник
Привет, Донал. Я использовал тот же способ, чтобы узнать, подключено ли наше устройство к Wi-Fi. Но кроме того, мне нужно знать имя приложения, которое в данный момент использует WIFI. Как это можно сделать?
AbhishekB
@AbhishekB, извините, но у меня нет никакого опыта с этим, возможно, попробуйте взглянуть на некоторые из приложений мониторинга Wi-Fi, посмотреть, есть ли приложение с открытым исходным кодом, где вы можете просмотреть код.
Донал Рафферти
Я с подозрением отношусь к этому решению, поскольку соискатель используется только в том случае, если используется WPA (или какой-либо вариант WPA): если пользователь подключается к точке доступа без аутентификации или WEP, то соискатель не участвует.
Том
2
Он по-прежнему отображается как «ЗАВЕРШЕНО», хотя я не на Wi-Fi
Эван Парсонс
1
есть ли какая-либо система вещания для вышеупомянутых состояний? @DonalRafferty
Рохит Сингх,
19

Я использую это в своих приложениях, чтобы проверить, является ли активная сеть Wi-Fi:

ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo ni = cm.getActiveNetworkInfo();
if (ni != null && ni.getType() == ConnectivityManager.TYPE_WIFI)
{

    // Do your work here

}
кути
источник
Это лучший ответ, потому что он гарантирует, что activeсеть (та, которая будет использоваться для загрузки) является WiFi
Гавриил
1
Это также лучший ответ сейчас, который NetworkInfo#isConnectedустарел
Таш Пемхива
Определенно лучший ответ на этот год (2017).
Даниэль Ньюджент
18

Я взглянул на несколько таких вопросов и придумал:

ConnectivityManager connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
NetworkInfo wifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
NetworkInfo mobile = connManager .getNetworkInfo(ConnectivityManager.TYPE_MOBILE);

if (wifi.isConnected()){
    // If Wi-Fi connected
}

if (mobile.isConnected()) {
    // If Internet connected
}

Я использую if для проверки моей лицензии в Root Toolbox PRO, и, похоже, он отлично работает.

LukeMovement
источник
8
выглядит хорошо, но я не уверен, почему вы получаете вторую ссылку на ConnectivityManager. В этом примере connManager и connManager1 - это один и тот же объект
Натан Шверманн
1
Значит ли TYPE_MOBLIE 3gnet или gprs net?
herbertD
1
TYPE_MOBILE означает любые данные с использованием вашего оператора - 2G (GPRS ...), 3G (HSDPA ...) или 4G (LTE ...).
Евгений Печанец
1
Вы можете добавить TYPE_ETHERNET, который работал нормально при подключении Android к Ethernet
MBH
1
Стоит иметь в виду, что getNetworkInfo()будет возвращаться ноль, если сеть не существует. Поэтому, если устройство не имеет мобильной связи, это приведет к ошибке. В большинстве случаев TYPE_ETHERNET будет иметь нулевое значение в этом случае, так как большинство устройств не будет иметь соединение Ethernet.
Кносс
7

Хотя ответ Джейсона верен, в настоящее время getNetWorkInfo (int) является устаревшим методом. Итак, следующая функция будет хорошей альтернативой:

public static boolean isWifiAvailable (Context context)
{
    boolean br = false;
    ConnectivityManager cm = null;
    NetworkInfo ni = null;

    cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    ni = cm.getActiveNetworkInfo();
    br = ((null != ni) && (ni.isConnected()) && (ni.getType() == ConnectivityManager.TYPE_WIFI));

    return br;
}
Валь Мартинес
источник
3

Используя WifiManagerвы можете сделать:

WifiManager wifi = (WifiManager) getSystemService (Context.WIFI_SERVICE);
if (wifi.getConnectionInfo().getNetworkId() != -1) {/* connected */}

Метод getNeworkId возвращает -1 только тогда, когда он не подключен к сети;

малина
источник
WIFI_STATE_DISABLED Константа Значение: 1 (0x00000001) WIFI_STATE_DISABLING Константа Значение: 0 (0x00000000) WIFI_STATE_ENABLED Константа Значение: 3 (0x00000003) WIFI_STATE_ENABLING постоянное значение: 2 (0x00000002) WIFI_STATE_UNKNOWN Константа Значение: 4 (0x00000004)
Лу Morda
Это больше не будет работать в Android Q без разрешения местоположения и включения режима местоположения, см. Issetracker.google.com/issues/136021574 .
Консумьер
3
ConnectivityManager manager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
boolean is3g = manager.getNetworkInfo(
                  ConnectivityManager.TYPE_MOBILE).isConnectedOrConnecting();
boolean isWifi = manager.getNetworkInfo(
                    ConnectivityManager.TYPE_WIFI).isConnectedOrConnecting();

Log.v("", is3g + " ConnectivityManager Test " + isWifi);
if (!is3g && !isWifi) {
    Toast.makeText(
        getApplicationContext(),
        "Please make sure, your network connection is ON ",
        Toast.LENGTH_LONG).show();
}
else {
    // Put your function() to go further;
}
GM Рамеш
источник
1
было бы лучше добавить некоторые объяснения, а не просто код.
EdChum
2
Я хотел бы использовать isConnected () , документы говорят: boolean isConnectedOrConnecting ()Указывает, существует ли сетевое подключение или находится в процессе создания. Это хорошо для приложений, которые должны делать что-либо, связанное с сетью, кроме чтения или записи данных. Для последнего звоните isConnected()вместо этого, что гарантирует, что сеть полностью пригодна для использования.
18446744073709551615
3

Следующий код (в Kotlin) работает от API 21 до как минимум текущей версии API (API 29). Функция getWifiState () возвращает одно из 3 возможных значений состояния сети WiFi: Disable, EnabledNotConnected и Connected, которые были определены в классе enum. Это позволяет принимать более детальные решения, такие как информирование пользователя о включении Wi-Fi или, если оно уже включено, подключения к одной из доступных сетей. Но если все, что нужно, это логическое значение, указывающее, подключен ли интерфейс WiFi к сети, тогда другая функция - Wi-FiConnected () даст вам это. Он использует предыдущий и сравнивает результат с подключенным.

Он вдохновлен некоторыми из предыдущих ответов, но пытается решить проблемы, возникающие в связи с эволюцией Android API или медленно растущей доступностью IP V6. Хитрость заключалась в использовании:

wifiManager.connectionInfo.bssid != null 

вместо того:

  1. getIpAddress () == 0, который действителен только для IP V4 или
  2. getNetworkId () == -1, который теперь требует другого специального разрешения (Местоположение)

Согласно документации: https://developer.android.com/reference/kotlin/android/net/wifi/WifiInfo.html#getbssid он вернет ноль, если не подключен к сети. И даже если у нас нет разрешения на получение реального значения, оно все равно будет возвращать что-то отличное от нуля, если мы подключены.

Также имейте в виду следующее:

В выпусках до android.os.Build.VERSION_CODES # N этот объект следует получать только из Context # getApplicationContext (), а не из любого другого производного контекста, чтобы избежать утечек памяти в вызывающем процессе.

В Манифесте не забудьте добавить:

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

Предлагаемый код:

class MyViewModel(application: Application) : AndroidViewModel(application) {

   // Get application context
    private val myAppContext: Context = getApplication<Application>().applicationContext

   // Define the different possible states for the WiFi Connection
    internal enum class WifiState {
        Disabled,               // WiFi is not enabled
        EnabledNotConnected,    // WiFi is enabled but we are not connected to any WiFi network
        Connected,              // Connected to a WiFi network
    }

    // Get the current state of the WiFi network
    private fun getWifiState() : WifiState {

        val wifiManager : WifiManager = myAppContext.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager

        return if (wifiManager.isWifiEnabled) {
                    if (wifiManager.connectionInfo.bssid != null)
                        WifiState.Connected
                    else
                        WifiState.EnabledNotConnected
               } else {
                    WifiState.Disabled
               }
    }

    // Returns true if we are connected to a WiFi network
    private fun isWiFiConnected() : Boolean {
        return (getWifiState() == WifiState.Connected)
    }
}
DarkJediNinja
источник
3

NetworkInfoНачиная с уровня API 29, этот класс устарел вместе со связанными методами доступа, такими как ConnectivityManager#getNetworkInfo()и ConnectivityManager#getActiveNetworkInfo().

Документация в настоящее время предлагает человек использовать ConnectivityManager.NetworkCallbackAPI для асинхронизированного мониторинга обратного вызова или использования ConnectivityManager#getNetworkCapabilitiesили ConnectivityManager#getLinkPropertiesдля синхронизированного доступа к информации сети

Вызывающие абоненты должны вместо этого использовать API ConnectivityManager.NetworkCallback, чтобы узнать об изменениях подключения, или переключиться на использование ConnectivityManager # getNetworkCapabilities или ConnectivityManager # getLinkProperties для получения информации синхронно.


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

Котлин:

val connMgr = applicationContext.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager?
connMgr?: return false
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    val network: Network = connMgr.activeNetwork ?: return false
    val capabilities = connMgr.getNetworkCapabilities(network)
    return capabilities != null && capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)
} else {
    val networkInfo = connMgr.activeNetworkInfo ?: return false
    return networkInfo.isConnected && networkInfo.type == ConnectivityManager.TYPE_WIFI
}

Ява:

ConnectivityManager connMgr = (ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
if (connMgr == null) {
    return false;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    Network network = connMgr.getActiveNetwork();
    if (network == null) return false;
    NetworkCapabilities capabilities = connMgr.getNetworkCapabilities(network);
    return capabilities != null && capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI);
} else {
    NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
    return networkInfo.isConnected() && networkInfo.getType() == ConnectivityManager.TYPE_WIFI;
}

Не забудьте также добавить разрешение ACCESS_NETWORK_STATEв свой файл манифеста.

jackz314
источник
2

Попробуйте этот метод.

public boolean isInternetConnected() {
    ConnectivityManager conMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    boolean ret = true;
    if (conMgr != null) {
        NetworkInfo i = conMgr.getActiveNetworkInfo();

        if (i != null) {
            if (!i.isConnected()) {
                ret = false;
            }

            if (!i.isAvailable()) {
                ret = false;
            }
        }

        if (i == null)
            ret = false;
    } else
        ret = false;
    return ret;
}

Этот метод поможет найти доступ к интернету или нет.

Мэриленд
источник
1
Я искал специально, если активное соединение Wi-Fi. Кроме того, нет необходимости делать нулевую проверку на conMgr, она никогда не будет нулевой.
Натан Шверманн
Можете ли вы проверить этот вопрос, пожалуйста? :(
Skizo-ozᴉʞS
2

Это работает для меня:

    ConnectivityManager conMan = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

    // Mobile
    State mobile = conMan.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState();

    // Wi-Fi
    State wifi = conMan.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();

    // And then use it like this:

    if (mobile == NetworkInfo.State.CONNECTED || mobile == NetworkInfo.State.CONNECTING)
    {
        Toast.makeText(Wifi_Gprs.this,"Mobile is Enabled :) ....",Toast.LENGTH_LONG).show();
    }
    else if (wifi == NetworkInfo.State.CONNECTED || wifi == NetworkInfo.State.CONNECTING)
    {
        Toast.makeText(Wifi_Gprs.this,"Wifi is Enabled  :) ....",Toast.LENGTH_LONG).show();
    }
    else
    {
        Toast.makeText(Wifi_Gprs.this,"No Wifi or Gprs Enabled :( ....",Toast.LENGTH_LONG).show();
    }

И добавьте это разрешение:

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Ahmad
источник
2

Во многих ответах используется устаревший код или код, доступный в более высоких версиях API. Теперь я использую что-то вроде этого

ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        if(connectivityManager != null) {
            for (Network net : connectivityManager.getAllNetworks()) {
                NetworkCapabilities nc = connectivityManager.getNetworkCapabilities(net);
                if (nc != null && nc.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)
                        && nc.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET))
                    return true;
            }
        }
        return false;
Олег Шевченко
источник
1

Вот что я использую в качестве служебного метода в своих приложениях:

public static boolean isDeviceOnWifi(final Context context) {
        ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
        return mWifi != null && mWifi.isConnectedOrConnecting();
}
Махендра Лия
источник
Хорошо отметить, что метод isConnectedOrConnecting важен при проверке установления соединения. Метод IsConnected не работает для меня.
Винсент
1

В новой версии Android

private void getWifiInfo(Context context) {
    ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    Network[] networks = connManager.getAllNetworks();

    if(networks == null || networks.length == 0)
        return;

    for( int i = 0; i < networks.length; i++) {
        Network ntk = networks[i];
        NetworkInfo ntkInfo = connManager.getNetworkInfo(ntk);
        if (ntkInfo.getType() == ConnectivityManager.TYPE_WIFI && ntkInfo.isConnected() ) {
            final WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
            final WifiInfo connectionInfo = wifiManager.getConnectionInfo();
            if (connectionInfo != null) {
                // add some code here
            }
        }

    }
}

и добавить представление тоже

Альберт Нгуен
источник
connManager.getAllNetworks()требуется уровень API 21
Джаванд Сингх
1

Аналогично ответу @Jason Knight, но по-котлински:

val connManager = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI)

if (mWifi.isConnected) {
     // Do whatever
}
Джерри Чонг
источник
ConnectivityManager.TYPE_WIFIустарело
Жером Пьетри
0

Это более простое решение. См. Вопрос переполнения стека Проверка включения или выключения Wi-Fi на Android .

PS Не забудьте добавить код в файл manifest.xml, чтобы получить разрешение. Как показано ниже.

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" >
</uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >
</uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" >
</uses-permission>
Clayden
источник
0

Пытаться

wifiManager.getConnectionInfo().getIpAddress()

Возвращает 0 до тех пор, пока устройство не сможет использовать соединение (на моей машине Samsung SM-T280, Android 5.1.1).

Адриан
источник
0

Вы можете включить WIFI, если он не активирован, как показано ниже: 1. проверьте состояние WIFI, ответив @Jason Knight 2. если не активировано, активируйте его, не забудьте добавить разрешение WIFI в файл манифеста

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

Ваш класс Java должен быть таким

public class TestApp extends Activity {
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    //check WIFI activation
    ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

    if (mWifi.isConnected() == false) {
        showWIFIDisabledAlertToUser();
    }
    else {
        Toast.makeText(this, "WIFI is Enabled in your devide", Toast.LENGTH_SHORT).show();
    }
}


private void showWIFIDisabledAlertToUser(){
    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
    alertDialogBuilder.setMessage("WIFI is disabled in your device. Would you like to enable it?")
            .setCancelable(false)
            .setPositiveButton("Goto Settings Page To Enable WIFI",
                    new DialogInterface.OnClickListener(){
                        public void onClick(DialogInterface dialog, int id){
                            Intent callGPSSettingIntent = new Intent(
                                    Settings.ACTION_WIFI_SETTINGS);
                            startActivity(callGPSSettingIntent);
                        }
                    });
    alertDialogBuilder.setNegativeButton("Cancel",
            new DialogInterface.OnClickListener(){
                public void onClick(DialogInterface dialog, int id){
                    dialog.cancel();
                }
            });
    AlertDialog alert = alertDialogBuilder.create();
    alert.show();
}

}

Ахмед Белал
источник
0

Добавьте это для JAVA:

public boolean CheckWifiConnection() {
        ConnectivityManager conMgr = (ConnectivityManager) getSystemService (Context.CONNECTIVITY_SERVICE);
        if (conMgr.getActiveNetworkInfo() != null
                && conMgr.getActiveNetworkInfo().isAvailable()
                && conMgr.getActiveNetworkInfo().isConnected()) {
            return true;
        } else {
            return false;
        }
    }

в файле манифеста добавить следующие разрешения:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
Стрелец
источник
0

В некотором роде вопрос, но это то, что я использую. требует минимального уровня API 21 и принимает во внимание устаревшие Networkinfo API.

boolean isWifiConn = false;
    ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        Network network = connMgr.getActiveNetwork();
        if (network == null) return false;
        NetworkCapabilities capabilities = connMgr.getNetworkCapabilities(network);
        if(capabilities != null && capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)){
            isWifiConn = true;
            Toast.makeText(context,"Wifi connected Api >= "+Build.VERSION_CODES.M,Toast.LENGTH_LONG).show();
        }else{
            Toast.makeText(context,"Wifi not connected Api >= "+Build.VERSION_CODES.M,Toast.LENGTH_LONG).show();
        }
    } else {
        for (Network network : connMgr.getAllNetworks()) {
            NetworkInfo networkInfo = connMgr.getNetworkInfo(network);
            if (networkInfo.getType() == ConnectivityManager.TYPE_WIFI && networkInfo.isConnected()) {
                isWifiConn = true;
                Toast.makeText(context,"Wifi connected ",Toast.LENGTH_LONG).show();
                break;
            }else{
                Toast.makeText(context,"Wifi not connected ",Toast.LENGTH_LONG).show();
            }
        }
    }
    return isWifiConn;
katwekibs
источник