Как я вижу, подключен ли 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 как государство.
15 ответов:
вы должны иметь возможность использовать 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-Ассоциация завершена.
связывание-попытка связать с точка доступа.
завершено-все проверки подлинности завершенный.
отключено-это состояние указывает что клиент не связан, но скорее всего, чтобы начать искать доступ точка.
спящий-Android-добавлено состояние, что сообщается, когда клиент выдает явная команда разъединения.
FOUR_WAY_HANDSHAKE-WPA 4-полосная клавиша Рукопожатие в процессе.
GROUP_HANDSHAKE-ключ группы WPA Рукопожатие в процессе.
INACTIVE-неактивное состояние.
INVALID-псевдо-состояние, которое должно обычно его никогда не видно.
сканирование-сканирование сети.
неинициализированный-нет соединения.
Я посмотрел на несколько вопросов, как это и придумал это:
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, и это, кажется, работает отлично.
Я использую это в моих приложениях, чтобы проверить, если активная сеть 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 }
во время Джейсон правильно, в настоящее время 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; }
используя
WifiManagerвы можете сделать:WifiManager wifi = (WifiManager) getSystemService (Context.WIFI_SERVICE); if (wifi.getConnectionInfo().getNetworkId() != -1) {/* connected */}метод getNeworkId возвращает 1 только тогда, когда он не подключен к сети;
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; }этот метод поможет найти подключение к интернету или нет.
это работает для меня:
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" />
вот что я использую в качестве метода утилиты в моих приложениях:
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(); }
в новой версии 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 } } } }и добавить premission не слишком
Это более простое решение. См. Раздел Переполнение Стека вопрос проверка Wi-Fi включен или нет на Android.
P. S. Не забудьте добавить код в манифест.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(); }}
Comments