Bueno acabo de integrar el autómata de Estados a autómata de Apps. El automata de apps difiere del de estados en que debe dejar actuar a varias apps a la vez y su función es tener el perfil activo de una aplicación aunque esta esté en segundo plano para que no realice la tarea de salida y para poder usar la variable %PACTIVE aún teniendo la aplicación en segundo plano. Espero vuestras sugerencias para mejorarlo:
El perfil autómata:
Perfil: AUTÓMATA APPS (4)
Notification: no
Estado: Valor de variable [ Nombre:%AppNueva Operador:Está ajustado Valor:* ]
Entrada: Autómata Apps (12)
A1: Ir a acción [ Tipo:Número Acción Número:9 Etiqueta: ] Si (if) [ %AppBloqueo Ajuste ]
A2: Ir a acción [ Tipo:Número Acción Número:9 Etiqueta: ] Si (if) [ %AppNueva ~ *%AppEstado* ]
A3: Establecer variable [ Nombre:%AppInicio A:%TIMES - %TSTART Calcular:Encendido Añadir:Apagado ]
A4: Si (if) [ %AppNueva ~ *%AppÚltima* ]
A5: Ir a acción [ Tipo:Número Acción Número:9 Etiqueta: ] Si (if) [ %AppInicio < 3 ]
A6: Fin si (End if)
A7: Establecer variable [ Nombre:%AppÚltima A:%AppEstado Calcular:Apagado Añadir:Apagado ]
A8: Establecer variable [ Nombre:%AppEstado A:%AppNueva Calcular:Apagado Añadir:Encendido ]
<limpiar y finalizar>
A9: Destino (de goto)
A10: Limpiar variable [ Nombre:%AppNueva Coincidencia de Patrón:Apagado ]
Como veis es prácticamente igual al autómata de estados sólo cambia el nombre de las variables y que la variable %Estado (AppEstado) en vez de ser sustituida cada vez que abrimos una aplicación se le añade el valor de la nueva aplicación para tener activos los perfiles de varias aplicaciones a la vez, tampoco tiene la notificación, que considero innecesaria en este caso. El Estado de bloqueo (%AppBloqueo) lo dejo por si le puedo dar utilidad en el futuro, de momento, no se lo encuentro dentro de mis perfiles.
En perfil de ENDOMONDO tendremos que poner la condición:
%AppEstado ~ *,ENDOMONDO/,*
(pongo una barra detrás / para que sea más fácil lectura la variable %AppEstado)
Ahora vamos con un perfil de control de aplicación, en este caso, Endomondo.
Perfil: Estado ENDOMONDO (57)
Aplicación: Endomondo
Entrada: Anon (90)
A1: Establecer variable [ Nombre:%AppNueva A:ENDOMONDO/ Calcular:Apagado Añadir:Apagado ]
Salida: Anon (112)
A1: Ejecutar consola [ Comando:cat /proc/$(pgrep com.endomondo.android.pro$)/oom_adj Cuenta atrás (segundos):0 Usar Root:Apagado Almacenar Salida En:%Endomondo Almacenar Errores En: Almacenar Resultado en: Continuar Tarea Tras Error:Encendido ]
A2: Esperar [ MS:0 Segundos:1 Minutos:0 Horas:0 Días:0 ]
A3: Si (if) [ %Endomondo != 2 ]
A4: Buscar y Reemplazar Contenido de Variable [ Variable:%AppEstado Buscar:ENDOMONDO/ Ignore Case:Apagado Multi-Line:Apagado One Match Only:Apagado Almacenar Coincidencias En: Reemplazar Coincidencias:Encendido Reemplazar Con: ]
A5: Fin si (End if)
En la tarea de salida ejecuto un comando para saber si Endomondo está en segundo plano, en caso contrario borro ENDOMONDO/ de la variable de «estado de aplicaciones»
Más información sobre cómo saber si las aplicaciones se están ejecutando en segundo plano en este hilo:
http://www.htcmania.com/showthread.php?p=8678272
Y el último perfil es el que limpia la variable %AppEstado al reiniciar el dispositivo:
Perfil: LIMPIAR APLICACIONES (122)
Evento: Reinicio del dispositivo
Entrada: Anon (125)
A1: Limpiar variable [ Nombre:%AppEstado Coincidencia de Patrón:Apagado ]