programacion - Android: comprueba programáticamente la conexión a Internet y muestra el cuadro de diálogo si no está conectado
manual android studio avanzado (8)
Esta es una función simple que comprueba su conexión a Internet. Si está Conectado, devuelve verdadero, de lo contrario falso
public boolean isInternetOn() {
// get Connectivity Manager object to check connection
ConnectivityManager connec =
(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
// Check for network connections
if (connec.getNetworkInfo(0).getState() == android.net.NetworkInfo.State.CONNECTED ||
connec.getNetworkInfo(0).getState() == android.net.NetworkInfo.State.CONNECTING ||
connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.CONNECTING ||
connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.CONNECTED) {
return true;
} else if (
connec.getNetworkInfo(0).getState() == android.net.NetworkInfo.State.DISCONNECTED ||
connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.DISCONNECTED) {
return false;
}
return false;
}
}
Aquí hay un proyecto que verifica la conexión a internet y también revisa la URL que es válida o está contenida en this .
Estoy trabajando en un proyecto en vivo. y cuando el usuario haga clic en la aplicación. Aparece la pantalla de bienvenida (hay una vista web en esa pantalla). y si Internet no está conectado, la aplicación falla. Básicamente, mi problema es verificar que el móvil esté conectado a internet o no. si no, entonces no recupere los datos del servicio web en webview y visualice un cuadro de diálogo que muestra "Verifique su conexión a Internet"
Mientras investigaba, encontré muchas cosas, y he tratado de implementar eso. pero, no está cumpliendo con mi requisito
mi codigo es
public boolean isOnline() {
ConnectivityManager cm =
(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
if (netInfo != null && netInfo.isConnectedOrConnecting()) {
return true;
}
else
{
Description.setVisibility(View.INVISIBLE);
new AlertDialog.Builder(WelcomePage.this)
.setTitle(getResources().getString(R.string.app_name))
.setMessage(
getResources().getString(
R.string.internet_error))
.setPositiveButton("OK", null).show();
}
return false;
}
estoy llamando a esta función en doInBackground()
de AsyncTask
¡Por favor ayuda!
Finalmente, tengo la respuesta.
ConnectivityManager conMgr = ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = conMgr.getActiveNetworkInfo();
if (netInfo == null){
Description.setVisibility(View.INVISIBLE);
new AlertDialog.Builder(WelcomePage.this)
.setTitle(getResources().getString(R.string.app_name))
.setMessage(getResources().getString(R.string.internet_error))
.setPositiveButton("OK", null).show();
}else{
dialog = ProgressDialog.show(WelcomePage.this, "", "Loading...", true,false);
new Welcome_Page().execute();
}
He intentado diferentes métodos descritos anteriormente, además de que he sido atrapado en algunos casos. Entonces, finalmente, estoy usando el siguiente fragmento de código para hacer una llamada de red ...
try {
InetAddress address = InetAddress.getByName("www..com");
//Connected to working internet connection
} catch (UnknownHostException e) {
e.printStackTrace();
//Internet not available
}
Esto puede ser útil en muchas perspectivas. Si algo no está bien en este enfoque, hágamelo saber.
La conexión a Internet también verifica en el onCreate()
o onResume()
. No hay necesidad de llamar dentro de AsyncTask.
o Puede llamar antes de llamar al método Execute () de AsyncTask
if(isOnline)
{
MyAsyncTask task=new MyAMyAsyncTask();
task.execute();
}
else
{
// no internet connection
}
Usted podría retirar esta biblioteca:
https://github.com/novoda/merlin
Simplemente implement Connectable
y obtendrás una devolución de llamada cuando la red se caiga o se active.
Por lo tanto puedes mostrar tu diálogo en este escenario.
También puede consultar el estado actual de la biblioteca y elegir no hacer su tarea de red
Crear Merlin (usando Merlin.Builder ())
merlin = new Merlin.Builder().withConnectableCallbacks().build(context);
Enlazar y desvincular el servicio en su actividad.
@Override
protected void onResume() {
super.onResume();
merlin.bind();
}
@Override
protected void onPause() {
super.onPause();
merlin.unbind();
}
Registrarse para devoluciones de llamada
merlin.registerConnectable(new Connectable() {
@Override
public void onConnect() {
// Do something!
}
});
El MerlinActivity dentro de la demostración muestra una manera sencilla de separar a Merlin de su código de aplicación principal.
doInBackground
ejecuta en un subproceso diferente al de la interfaz de usuario principal, por lo que no puede crear un cuadro de diálogo mostrar aquí. En su lugar, anule onPreExecute en su AsyncTask
y realice la prueba allí.
Comprobar la conexión a internet
ConnectivityManager mgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = mgr.getActiveNetworkInfo();
if (netInfo != null) {
if (netInfo.isConnected()) {
// Internet Available
}else {
//No internet
}
} else {
//No internet
}
if (InternetConnection.checkConnection(context)) {
// Internet Available...
} else {
// Internet Not Available...
}
solo copia debajo de la clase
public class InternetConnection {
/** CHECK WHETHER INTERNET CONNECTION IS AVAILABLE OR NOT */
public static boolean checkConnection(Context context) {
final ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connMgr.getActiveNetworkInfo();
if (activeNetworkInfo != null) { // connected to the internet
Toast.makeText(context, activeNetworkInfo.getTypeName(), Toast.LENGTH_SHORT).show();
if (activeNetworkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
// connected to wifi
return true;
} else if (activeNetworkInfo.getType() == ConnectivityManager.TYPE_MOBILE) {
// connected to the mobile provider''s data plan
return true;
}
}
return false;
}
}
Dar siguiente permiso para manifestar
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />