2011-01-20 21 views
6

Si hago un brindis cuando la actividad de mi aplicación no está en primer plano, la tostada seguirá apareciendo en la pantalla. ¿Cómo puedo evitar que mi brindis se muestre cuando mi aplicación se ejecuta en segundo plano? es decir, con ninguna de sus actividades actualmente se muestra la actividad.¿Quieres ocultar toast de Android cuando la aplicación está en segundo plano?

Estoy pensando que de alguna manera debo detectar que mis actividades no son la actividad que se muestra actualmente y cuando es cierto no se emite ningún brindis; pero ¿cómo podría detectar esta condición?

Gracias

Respuesta

9

Establezca un indicador cuando su aplicación esté en segundo plano (es decir, en), y no envíe tostadas si se establece el indicador.

Si tiene un montón de actividades, puede definir su propia clase base Activity que envuelve esta funcionalidad.

+0

+1 me consiguió por 4 segundos;) –

2

¿Ha intentado establecer una variable o algún indicador cuando se llama al método onPause() para esa actividad para denotar la ha puesto en el fondo, a continuación, convertir ese indicador cuando onResume() se llama?

Luego deje que la tostada ocurra si el indicador está apagado.

+1

+1 ... nada está mal con ser el segundo lugar :) – EboMike

0

En mi aplicación, las tostadas en cola aparecen una y otra vez cuando la aplicación entra en el fondo, así que lo hice para resolver el problema.

Agregue el código para detectar cuando la aplicación entra en el fondo. Una forma de registrar el controlador del ciclo de vida. Para más detalles ref

registerActivityLifecycleCallbacks(new MyLifecycleHandler()); 

App.inBackground = true; cuando la aplicación va a fondo y mostrar tostadas usando la clase SmartToast

public class SmartToast { 

    static ArrayList<WeakReference<Toast>> toasts = new ArrayList<>(); 
    public static void showToast(@NonNull Context context,@NonNull String message){ 
     //this will not allowed to show toast when app in background 
     if(App.inBackground) return; 
     Toast toast = Toast.makeText(context,message,Toast.LENGTH_SHORT); 
     toasts.add(new WeakReference<>(toast)); 
     toast.show(); 

     //clean up WeakReference objects itself 
     ArrayList<WeakReference<Toast>> nullToasts = new ArrayList<>(); 
     for (WeakReference<Toast> weakToast : toasts) { 
      if(weakToast.get() == null) nullToasts.add(weakToast); 
     } 
     toasts.remove(nullToasts); 
    } 

    public static void cancelAll(){ 
     for (WeakReference<Toast> weakToast : toasts) { 
      if(weakToast.get() != null) weakToast.get().cancel(); 
     } 
     toasts.clear(); 
    } 

} 

llamada SmartToast.cancelAll(); método cuando entra en aplicación de fondo para ocultar tostadas pendientes actuales y todos. El código es divertido ¡Disfrutar!

Cuestiones relacionadas