validar tengo studio internet hacer conexion check change android android-wifi wifimanager

tengo - ¿Cómo puedo ver si Wi-Fi está conectado a Android?



hacer ping android studio (15)

No quiero que mi usuario incluso intente descargar algo a menos que tenga Wi-Fi conectado. Sin embargo, parece que solo puedo decir si Wi-Fi está habilitado, pero aún así podrían tener una conexión 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; }

Sin embargo, el estado no es lo que yo esperaría. Aunque la conexión Wi-Fi está conectada, OBTAINING_IPADDR como estado.


Dado que el método NetworkInfo.isConnected () ahora está en desuso en API-23 , aquí hay un método que detecta si el adaptador de Wi-Fi está encendido y también está conectado a un punto de acceso usando WifiManager en su lugar:

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


Debería poder usar el Administrador de conectividad para obtener el estado del adaptador de Wi-Fi. Desde allí puede comprobar si está conectado o incluso disponible .

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

NOTA: Debe tener en cuenta (para nosotros n00bies aquí) que debe agregar

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

para usted

AndroidManifest.xml para que esto funcione.

NOTA2 : la información public NetworkInfo getNetworkInfo (int networkType) ahora está en desuso:

Este método quedó en desuso en el nivel de API 23. Este método no admite varias redes conectadas del mismo tipo. Utilice getAllNetworks () y getNetworkInfo (android.net.Network) en su lugar.

NOTA3 : public static final int TYPE_WIFI ahora está en desuso:

Esta constante quedó en desuso en el nivel de API 28. Las aplicaciones deben usar NetworkCapabilities.hasTransport (int) o requestNetwork (NetworkRequest, NetworkCallback) para solicitar una red apropiada. para los transportes soportados.


Eché un vistazo a algunas preguntas como esta y se me ocurrió esto:

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 }

Utilizo si para mi verificación de licencia en Root Toolbox PRO, y parece funcionar muy bien.


En nueva versión de 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 } } } }

y agrega premision tambien


Esta es una solución más fácil. Consulte la pregunta sobre el desbordamiento de pila Comprobación de Wi-Fi habilitado o no en Android .

PS No olvide agregar el código al archivo manifest.xml para permitir el permiso. Como se muestra abajo.

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


Esto es lo que uso como método de utilidad en mis aplicaciones:

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


Esto funciona para mí:

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

Y agrega este permiso:

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


Estoy usando esto en mis aplicaciones para verificar si la red activa es 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 }


Prueba este método.

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

Este método ayudará a encontrar conexión a internet disponible o no.


Puede activar WIFI si no está activado como se indica a continuación 1. Verifique el estado de WIFI como se responde en @Jason Knight 2. Si no está activado, actívelo. No olvide agregar el permiso WIFI en el archivo de manifiesto.

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

Tu clase de Java debería ser así.

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

}


Si bien la respuesta de Jason es correcta, actualmente getNetWorkInfo (int) es un método obsoleto. Entonces, la siguiente función sería una buena alternativa:

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


Simplemente uso lo siguiente:

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

Que devolverá uno de estos estados en el momento en que llame a getSupplicantState ();

ASOCIADO - Asociación completada.

ASOCIACIÓN: intentar asociarse con un punto de acceso.

COMPLETADO - Se completó toda la autenticación.

DESCONECTADO: este estado indica que el cliente no está asociado, pero es probable que comience a buscar un punto de acceso.

DORMANTE: un estado agregado a Android que se informa cuando un cliente emite un comando DESCONECTAR explícito.

FOUR_WAY_HANDSHAKE - Apretón de manos de 4 vías WPA en progreso.

GROUP_HANDSHAKE - Apretón de manos clave del grupo WPA en curso.

INACTIVO - Estado inactivo.

NO VÁLIDO: un pseudo-estado que normalmente nunca debería verse.

ESCANEO - Escaneando una red.

UNINITIALIZADO - Sin conexión.


Tratar

wifiManager.getConnectionInfo().getIpAddress()

Esto devuelve 0 hasta que el dispositivo tiene una conexión utilizable (en mi máquina, un Samsung SM-T280, Android 5.1.1).


Usando WifiManager puedes hacer:

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

El método getNeworkId devuelve -1 solo cuando no está conectado a una red;


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