Как узнать, подключен ли Wi-Fi на Android? - PullRequest
229 голосов
/ 01 октября 2010

Я не хочу, чтобы мой пользователь даже пытался что-то скачать, если у него не подключен 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 в качестве состояния.

Ответы [ 16 ]

1 голос
/ 04 июня 2019

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

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

if (mWifi.isConnected) {
     // Do whatever
}
1 голос
/ 17 февраля 2017

В новой версии 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
            }
        }

    }
}

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

1 голос
/ 24 февраля 2015

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

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();
}
0 голосов
/ 01 января 2017

Вы можете включить 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 голосов
/ 23 октября 2016

Попробуйте

wifiManager.getConnectionInfo().getIpAddress()

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

0 голосов
/ 30 ноября 2015

Это более простое решение.См. Вопрос переполнения стека Проверка включения или выключения 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>
...