Tengo un servicio que creo que se ejecuta en primer plano, ¿Cómo puedo verificar si mi implementación está funcionando?¿Cómo determinar si un servicio de Android se está ejecutando en primer plano?
Respuesta
private boolean isServiceRunning(String serviceName){
boolean serviceRunning = false;
ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
List<ActivityManager.RunningServiceInfo> l = am.getRunningServices(50);
Iterator<ActivityManager.RunningServiceInfo> i = l.iterator();
while (i.hasNext()) {
ActivityManager.RunningServiceInfo runningServiceInfo = i
.next();
if(runningServiceInfo.service.getClassName().equals(serviceName)){
serviceRunning = true;
if(runningServiceInfo.foreground)
{
//service run in foreground
}
}
}
return serviceRunning;
}
Si desea saber si su servicio se está ejecutando en primer plano acaba de abrir algunas otras aplicaciones de grasa y luego verificar si el servicio aún está en marcha o simplemente comprobar bandera service.foreground
.
public static boolean isServiceRunningInForeground(Context context, Class<?> serviceClass) {
ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if (serviceClass.getName().equals(service.service.getClassName())) {
if (service.foreground) {
return true;
}
}
}
return false;
}
Encuentro el código en esta respuesta más nítido que el código en la respuesta aceptada, y funciona incluso si hay más de 50 servicios en ejecución, a diferencia de la respuesta aceptada. – Sam
Lo mismo que aceptado, pero más claro, más corto, simple. También verifique todos los servicios, no solo 50. – Sergio
Una variante más eficiente de la respuesta: https://stackoverflow.com/a/36127260/1275265
public static boolean isServiceRunningInForeground(Context context, Class<?> serviceClass) {
ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if (serviceClass.getName().equals(service.service.getClassName())) {
return service.foreground;
}
}
return false;
}
- 1. Determinar si una aplicación se está ejecutando en primer plano cuando se recibe una notificación en iOS
- 2. Cómo determinar si una de mis actividades está en primer plano
- 3. ¿Verifica si se está ejecutando un servicio de Windows?
- 4. Cómo comprobar si se está ejecutando un Thread de Android
- 5. Cómo determinar si una aplicación web se está ejecutando actualmente
- 6. Servicio de primer plano de Android que puede vincularse
- 7. Determinar si el programa se está ejecutando en Windows Server
- 8. Android: Servicio de primer plano frente a wakeLock
- 9. Descubriendo si la actividad de Android se está ejecutando
- 10. Cómo saber si el servicio se está ejecutando utilizando adb shell en android
- 11. cómo evitar que el servicio se ejecute nuevamente si ya está ejecutando android
- 12. ¿Hay alguna forma de determinar si la aplicación de Android se está ejecutando a pantalla completa?
- 13. ¿Cómo determinar si el código .NET se está ejecutando en un proceso ASP.NET?
- 14. ¿Cómo puedo determinar si un script de shell se está ejecutando con permisos de raíz?
- 15. C++, ¿Cómo determinar si se está ejecutando un proceso de Windows?
- 16. ¿Cómo determinar si se está ejecutando una instancia previa de mi aplicación?
- 17. ¿Cómo se puede detectar si una página está en segundo plano o en primer plano con jquery/javascript?
- 18. Android: compruebe si el servicio se está ejecutando a través de. bindService
- 19. Informar Actividad desde un BroadcastReceiver SOLAMENTE si está en primer plano
- 20. ¿Cómo determinar si un dispositivo Android está rooteado programáticamente?
- 21. ¿Cómo comprobar si un servicio se está ejecutando a través de un archivo por lotes e iniciarlo, si no se está ejecutando?
- 22. Determinar si UILocalNotification disparó con la aplicación en primer plano o de fondo
- 23. ¿Cómo determinar si su aplicación se está ejecutando en el Servidor de Desarrollo de Python local?
- 24. START_STICKY, el servicio de primer plano de Android se va sin previo aviso
- 25. Cómo determinar si las pruebas PHPUnit se están ejecutando?
- 26. ¿Cómo puede mi programa determinar si se está ejecutando en Windows de 32 o 64 bits?
- 27. ¿CÓMO determinar si el código se está ejecutando en el contexto del manejador de señal?
- 28. ¿Cómo puedo verificar si se está ejecutando un servicio de Windows?
- 29. Android cómo comprobar si el servicio de intento aún se está ejecutando o si ha dejado de ejecutarse
- 30. Ejecutando Android TTS en un servicio
Gracias que funcionaron muy bien! Solo necesitaba agregar esta línea: serviceInForeground = runningServiceInfo.foreground; – user811985
¿Qué pasa con stopForeground (true) en onDestroy()? ¿Eso no evitaría que el servicio se ejecutara en primer plano? –
@ user811985 FYI, la documentación en RunningServiceInfo.foreground indica: "Establezca en verdadero si el servicio * ha pedido * que se ejecute como un proceso en primer plano.". Es decir, no te dice si Android realmente ha aceptado un servicio en primer plano. http://developer.android.com/reference/android/app/ActivityManager.RunningServiceInfo.html#foreground – newbyca