6

Tengo una tarea en segundo plano que me gustaría manejar. El asunto es que cuando la tarea finalice, me gustaría llamar a una nueva actividad para mostrar el resultado al usuario, solo si mi Actividad principal se muestra; de lo contrario, me gustaría enviar solo una notificación para que el usuario pueda ver que la acción completado, y poder abrirlo cuando lo desee.Mostrar una notificación solo si la actividad no muestra

Estaba pensando en utilizar un servicio para gestionar el inicio y la finalización de la tarea de fondo y transmitir un mensaje cuando finaliza, pero en este caso no tengo la opción de saber si se mostró la actividad o no se procesó y debería enviar una notificación.

Así que este es mi problema, y ​​debido a que mi conocimiento y experiencia en tareas y servicios de fondo es limitado, decidí pedir ayuda.

Gracias de antemano por leer mi caso, ¡espero algo de ayuda!

Respuesta

23

Aquí hay un buen artículo que describe cómo implementar lo que desea: Activity or Notification via Ordered Broadcast.

La idea principal es usar transmisiones ordenadas. Debería crear un BroadcastReceiver que vivirá sin ninguna actividad. Para hacerlo, debe declararlo en el archivo AndroidManifest.xml. Este receptor mostrará un Notification. También debe registrar otro BroadcastReceiver con mayor prioridad en su actividad principal que mostrará algo en la pantalla. Entonces solo necesitas enviar una transmisión ordenada.

+0

Esa fue una posible respuesta que descubrí después de publicar la pregunta y parece una muy buena práctica. El enlace es realmente útil, muchas gracias. ¡Creo que esta es la manera en que seguiré! – akalipetis

+3

super elegante y funciona bien! – Orr

+0

@ Antonis: ¿Puede proporcionarnos un código sobre cómo implementamos esto? – Sam

2

Pruebe así.

private static boolean isInForeground; 

onResume(){ 
    isInForground = true; 
} 
onPause(){ 
    isInForground = false; 
} 

si es isInForground true entonces actividad en Forground (Mostrando) de lo contrario no se muestra.

si desea saber desde cualquier lugar, a continuación, agregue lo siguiente en MainActivity.

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 

    onResume(){ 
     pref = PreferenceManager.getDefaultSharedPreferences(this); 
     prefEditor = prefs.edit(); 
     prefEditor.putBoolean("isInForeground",true); 
     prefEditor.commit(); 
    } 

    onPause(){ 
      pref = PreferenceManager.getDefaultSharedPreferences(this); 
      prefEditor = prefs.edit(); 
      prefEditor.putBoolean("isInForeground", false); 
      prefEditor.commit(); 
    } 

Luego de su servicio.

pref = PreferenceManager.getDefaultSharedPreferences(this); 
if(pref.getBoolean("isInForeground", false)){ 
     //MainActivity is in forground 

} 
else{ 
     //not in forground 
} 
1

Parece que desea implementar la tarea en un hilo de un Servicio. Puede tener un booleano estático persistente en la Actividad que indique si se muestra la actividad. Una actividad es visible para el usuario en onResume() y no visible siempre que se llame a onPause(). Establezca el valor booleano en verdadero en onResume() y falso en onPause().

0

puede usar SharedPreferences; actualiza las preferencias sobre una actividad cuando está en inicio() o en parada() y simplemente verifica en tu servicio.

Espero que ayude.

Cuestiones relacionadas