Este post fue probado por expertos para que tengas la garantía de la veracidad de nuestra esta crónica.
Solución:
prueba este código:
su clase de receptor de transmisión para la clase perdida de Internet:
public class InternetLostReceiver extends BroadcastReceiver
@Override
public void onReceive(Context context, Intent intent)
context.sendBroadcast(new Intent("INTERNET_LOST"));
en su actividad, agregue esto para llamar a la transmisión:
public class TestActivity extends Activity
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
registerReceiver(broadcastReceiver, new IntentFilter("INTERNET_LOST"));
BroadcastReceiver broadcastReceiver = new BroadcastReceiver()
@Override
public void onReceive(Context context, Intent intent)
// internet lost alert dialog method call from here...
;
@Override
protected void onDestroy()
super.onDestroy();
unregisterReceiver(broadcastReceiver);
INTERFAZ: ¡Mantenga el BroadCastReceiver y el código de actividad separados!
Puede crear una interfaz CallBackListener. La interfaz funcionará como un puente entre BroadcastReceiver
y Activity
.
1) Crear un CallbackListener
interface ConnectionLostCallback
public void connectionLost();
2) Proporcionar ConnectionLostCallback
en su BroadcastReceiver
public class MyBroadcastReceiver extends BroadcastReceiver
private ConnectionLostCallback listener;
public MyBroadcastReceiver(ConnectionLostCallback listener )
this.listener = listener //<-- Initialze it
@Override
public void onReceive(Context context, Intent intent)
listener.connectionLost();
3) Implementar el ConnectionLostCallback
en su actividad y anular el método
YourActvity extends AppcompatActivity implements ConnectionLostCallback
// Your Activity related code //
// new MyBroadcastReceiver(this); <-- create instance
private void showAlertMessage()
AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);
@Override
public void connectionLost()
showAlertMessage(); //<--- Call the method to shoe alert dialog
Enlace relevante:
Si desea saber cómo hacer que un BroadcastReceiver sea independiente de cualquier actividad, es decir, ¿cómo puede reutilizar el mismo BroadCastReceiver con diferentes actividades? Entonces LEE ESTO
Agregue una variable booleana en su actividad desde donde está abierto alertdialog
boolean isDialogOpened = false;
// in broadcast recever check
if(isDialogOpened)
alertDialog();
Y reemplace su código para alertdialog con este
public void alertDialog()
AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);
alertDialog.setMessage("Network not found.");
alertDialog.setPositiveButton("Check Setting",
new DialogInterface.OnClickListener()
public void onClick(DialogInterface dialog, int which)
);
alertDialog.setNegativeButton("Cancel",
new DialogInterface.OnClickListener()
public void onClick(DialogInterface dialog, int which)
);
alertDialog.setOnDismissListener(new OnDismissListener()
@Override
public void onDismiss(DialogInterface dialog)
isDialogOpened = false;
);
alertDialog.setOnCancelListener(new OnCancelListener()
@Override
public void onCancel(DialogInterface dialog)
isDialogOpened = false;
);
alertDialog.show();
Calificaciones y reseñas
Si te ha sido de utilidad nuestro artículo, agradeceríamos que lo compartas con otros entusiastas de la programación de esta manera nos ayudas a dar difusión a nuestra información.