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

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

Solutions Collecting From Web of "Как узнать, подключен ли Wi-Fi на Android?"

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

 ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); if (mWifi.isConnected()) { // Do whatever } 

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

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

на ваш

AndroidManifest.xml для этого.

ПРИМЕЧАНИЕ2 : public NetworkInfo getNetworkInfo (int networkType) теперь устарела:

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

Поскольку метод 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 } } 

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

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

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

ASSOCIATED – Ассоциация завершена.

ASSOCIATING – попытка связать с точкой доступа.

COMPLETED – завершена аутентификация.

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

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

FOUR_WAY_HANDSHAKE – Выполняется рукописное письмо с 4-сторонним ключом WPA.

GROUP_HANDSHAKE – Рукопожатие группы ключей WPA продолжается.

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

INVALID – псевдо-состояние, которое, как правило, никогда не будет видно.

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

UNINITIALIZED – нет связи.

Я рассмотрел несколько таких вопросов и придумал следующее:

 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 } 

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

Я использую это в своих приложениях, чтобы проверить, является ли активная сеть 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 } 
 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; } 

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

 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; } 

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

Хотя ответ Джейсона правильный, в настоящее время 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; } 

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

 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(); } 

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

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

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

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

  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" /> 

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

И добавьте

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

Пытаться

 wifiManager.getConnectionInfo().getIpAddress() 

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

Вы можете включить 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(); } 

}