Saltar al contenido

Descubrir si la actividad de Android se está ejecutando

Angelina, miembro de nuestro equipo, nos ha hecho el favor de escribir esta crónica ya que conoce muy bien este tema.

Solución:

Solución 1:
Puede usar ActivityManager para verificar si la actividad se está ejecutando o no:

public boolean isActivityRunning()  

ActivityManager activityManager = (ActivityManager)Monitor.this.getSystemService (Context.ACTIVITY_SERVICE); 
    List activitys = activityManager.getRunningTasks(Integer.MAX_VALUE); 
    isActivityFound = false; 
    for (int i = 0; i < activitys.size(); i++)  
        if (activitys.get(i).topActivity.toString().equalsIgnoreCase("ComponentInfocom.example.testapp/com.example.testapp.Your_Activity_Name")) 
            isActivityFound = true;
        
     
    return isActivityFound; 
 

necesita agregar el permiso a su manifiesto ..


Solución 2:
Tu puedes usar un static variable en su actividad para la que desea verificar si se está ejecutando o no y almacenarla en algún lugar para acceder desde su servicio o receptor de transmisión como:

static boolean CurrentlyRunning= false;
      public void onStart() 
         CurrentlyRunning= true; //Store status of Activity somewhere like in shared //preference 
       
      public void onStop() 
         CurrentlyRunning= false;//Store status of Activity somewhere like in shared //preference 
      

¡Espero que esto haya sido útil!

El siguiente enfoque funcionaría bien si desea manejar el mensaje entrante de Google Cloud (C2DM) por su actividad (si se está ejecutando) o emitir una notificación si no se está ejecutando ninguna actividad.

Registre un BroadcastReceiver en el archivo de manifiesto. Este receptor manejará los mensajes C2D siempre que la aplicación no se esté ejecutando. Registre otro BroadcastReceiver programáticamente en su actividad. Este receptor manejará los mensajes C2D siempre que se esté ejecutando la actividad.

AndroidManifest.xml


    
        
        
    

MiReceptor.java

public class StaticReceiver extends BroadcastReceiver 

    @Override
    public void onReceive(Context context, Intent intent) 
        // TODO Trigger a Notification
    

MiActividad.java

public class MyActivity extends ActionBarActivity 

    @Override
    protected void onResume() 
    super.onResume();

        final IntentFilter filter = new 
                IntentFilter("com.google.android.c2dm.intent.RECEIVE");
        filter.addCategory("com.mypackage");
        filter.setPriority(1); 
        registerReceiver(dynamicReceiver, filter, 
                "com.google.android.c2dm.permission.SEND", null);
    

    @Override
    protected void onPause() 
        super.onPause();
        unregisterReceiver(dynamicReceiver);
    

    private final BroadcastReceiver dynamicReceiver 
            = new BroadcastReceiver() 
    
        @Override
        public void onReceive(Context context, Intent intent) 

            // TODO Handle C2DM

            // blocks passing broadcast to StaticReceiver instance
            abortBroadcast();
       
    ;

¡Nota! Para capturar transmisiones primero, la prioridad de dynamicReceiver IntentFilter debe ser mayor que la prioridad de la instancia de StaticReceiver IntentFilter (la prioridad predeterminada es '0').

PD. Parece que las transmisiones emitidas por Google Cloud Messaging Service son transmisiones ordenadas. Autor de la idea original: CommonsWare

Sección de Reseñas y Valoraciones

Si guardas algún dilema o forma de desarrollar nuestro división te sugerimos escribir una explicación y con mucho placer lo analizaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 5)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *