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.