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