Avisos

Tasker Para hablar de todo lo relacionado con la aplicación tasker


 
Herramientas
  #1  
Viejo 08/05/13, 11:02:23
Avatar de maid450
maid450 maid450 no está en línea
Miembro del foro
Mensajes: 450
 
Fecha de registro: sep 2009
Localización: Valencia
Mensajes: 450
Modelo de smartphone: Nexus 5 / Nexus 7
Versión de Radio: Cualquiera que ponga buen Rock
Tu operador: Yoigo
Mencionado: 15 comentarios
Tagged: 0 hilos
Introducción a los comandos de terminal en Tasker

Hola a todos!
En este tutorial voy a tratar de explicar un poco los conceptos básicos de los comandos de terminal en Android y como lanzarlos y aprovecharlos en Tasker.

Nota: los conceptos de este tutorial son bastante avanzados, aunque voy a tratar de explicarlo de forma sencilla.
En principio los comandos ejecutados como usuario normal no deberían ser capaces de causar un gran daño (el comando adecuado podría borrar todas tus fotos por ejemplo, pero no dañar al sistema) pero los comandos ejecutados como usuario root permiten hacer cualquier cosa, no ejecutar nada de esta forma si no se confía en la fuente o no se entiende más o menos lo que se está haciendo.


1. ¿Qué son?
Android está basado en linux, un sistema operativo que se caracteriza entre otras cosas por tener un terminal (llamado shell en inglés) muy potente que permite poder controlar casi por completo todo el sistema y obtener información mediante "ordenes" más o menos complejas, estas ordenes se conocen como comandos de terminal.
Los comandos en sí son programas (o ficheros con codigo ejecutable) que se guardan en /system/bin (ahí están los principales, aunque hay otros posibles sitios) así que pueden haber mods que dejen programas ahí y ya estarían disponibles para ejecutar.
Un ejemplo típico es "Busybox" que añade varios comandos comunes de linux y es más que recomendable instalarlo para todo usuario que tenga el telefono rooteado.

2. ¿Para qué sirven?
Como he dicho antes, mediante comandos se pueden hacer muchísimas cosas, aunque casi todo lo que nos pueda interesar puede hacerse mediante acciones normales de tasker.
Sin embargo hay cosas generalmente avanzadas que no se pueden hacer directamente y requieren hacer uso de comandos del terminal.
Como se hacen ciertas cosas y que se puede hacer ya es otra historia, en este aspecto linux es muy diferente a Mac OSX o a Windows, no hay una guia general de linux porque hay muchas variantes con pequeñas y no tan pequeñas diferencias entre si, Android es solo una de estas variantes especialmente adaptada para dispositivos mobiles.
Pero por otra parte la comunidad linuxera destaca por ser muy colaborativa y publicar mucha documentación de tutoriales, soluciones a problemas y demás, asi que no es dificil encontrar recursos si se busca "como hacer XXXXX en android", especialmente si sabes inglés.

3. Ejemplo práctico
Una limitación habitual en tasker es querer controlar si en un momento dado una aplicación está en marcha.

Esto es muy sencillo con aplicaciones "normales" ya que basta con hacer un perfil con el contexto "aplicación -> la aplicación a controlar" y una tarea de entrada que cree una variable %APPX a 1 y en la tarea de salida cambie el valor de la variable a 0.
Sin embargo, en aplicaciones que se puedan quedar en segundo plano esto no funciona, ya que en cuanto la aplicación deja de estar en primer plano, tasker piensa que se ha salido de la aplicación y la variable se pondría a 0.
Sin embargo el sistema operativo si que sabe que la aplicación sigue en marcha, ¡asi que vamos a preguntarle usando comandos!

Antes que nada, para poder lanzar estos comandos hay que tener un emulador de terminal instalado, el más conocido es este: https://play.google.com/store/apps/d...al.androidterm, pero cualquiera debería valer.

El comando completo a usar sería este:
Código:
cat /proc/$(pgrep %pname$)/oom_adj
¡No asustarse! Vamos a explicar por partes que hace este churro.

Primero que nada, Android no usa los nombres típicos por los que conocemos a las aplicaciones a nivel interno, sino lo que se llama el package name, y a nivel aún más interno (lo explicaré luego) el PID.
Para averiguar el package name de una aplicación lo más facil es buscar la aplicación en la web de google play y fijarse en la URL del navegador, el package name es lo que pone entre el "id=" y el primer "&" si lo hay, por ejemplo para el terminal emulator el package name es jackpal.androidterm.
Cuando Android lanza una aplicación le asigna un PID (Process ID) dinámico (si la aplicación muere y se vuelve a lanzar el nuevo PID que le asigne casi seguro que no será el mismo), que es un número que en adelante el sistema usará internamente para el manejo de memoria y más cosas.

Ahora, volviendo al comando, en realidad se trata de un comando dentro de otro, primero que nada habría que reemplazar %pname por el package name de la aplicación que queramos comprobar (para el ejemplo usaremos el propio terminal, recordemos: jackpal.androidterm) y si ejecutamos el comando interno que es

Código:
pgrep jackpal.androidterm
nos devolverá el PID de la aplicación (en mi caso da 25419, pero a cada uno le puede dar un valor diferente).

Y ahora por fin la explicación del comando completo: se da el caso de que android crea una carpeta por cada proceso en /proc (de ahí su nombre) y dentro de la carpeta de cada proceso entre otras cosas hay un archivo llamado "oom_adj" que solo contiene un numero con el estado de ejecución del mismo.

El comando "cat" simplemente muestra el contenido del archivo que le digas, de modo que cuando ejecutamos
Código:
cat /proc/$(pgrep jackpal.androidterm$)/oom_adj
primero resuelve el PID del proceso (recordemos en mi caso 25419), con lo que sería equivalente a ejecutar
Código:
cat /proc/25419/oom_adj
que devolvería el estado de ejecución de ese proceso.

Para el caso que nos interesa, un "0" significa que está en primer plano y un "2" en segundo plano, cualquier otro valor es que está en otro estado que podemos considerar como inactivo.

Espero no haberos perdido por el camino soy consciente que no es el ejemplo más sencillo, pero como digo, para hacer cosas sencillas no suele ser necesario usar el terminal, y he tratado de explicarlo lo mejor posible y no limitarme a soltar el comando y que penseis que hace magia...

4. Usar comandos con Tasker
Tasker tiene predefinida una acción en "Script -> Ejecutar consola" (o "Script -> Run shell" en inglés) que permite ejecutar comandos.
No confundir con las otras acciones en esta categoría:
- "Javascript" y "Javascriptlet" Son casi identicos y sirven para ejecutar código javascript dentro de tasker, no comandos de terminal. Lo cubriré en un proximo tutorial.
- "Ejecutar Script" Sirven para ejecutar código en otros lenguajes (como python o php) hay que instalaer los interpretes con SL4A. Lo cubriré en un proximo tutorial.

En la acción se puede definir el comando a ejecutar (permite usar variables), la cuenta atrás o "timeout" (tiempo máximo de ejecución, si se sobrepasa se cancela la orden, 0 es para infinito), y unas variables para almacenar la "salida" o "output" (lo que devuelve el comando), los "Errores" (posibles mensajes de error si algo va mal) y el "Resultado" (no confundir con la salida, esto es un codigo numérico que indica si la ejecución ha ido bien (devolvería 0) o no (devolvería cualquier otra cosa, depende del comando y el error), este valor no se ve al ejecutar comandos a mano desde el terminal) y tambien se puede marcar si se quiere ejecutar el comando como usuario root o no (hay comandos que necesitan ser ejecutados como root, mantenerlo desactivado siempre que sea posible).
Lo de "continuar tarea en caso de error" es conveniente marcarlo, ya que hay comandos que es normal que no devuelvan un resultado 0: en el ejemplo de antes por ejemplo, si el proceso que buscamos no tiene PID en el momento de ejecutar el comando, el fallará porque intenta mostrar un archivo que en ese momento no existe y si no marcamos esta opción la tarea se pararía y no haría nada más.

5. Comandos habituales / utiles

Nota: los comandos van entre comillas, pero hay que ejecutarlos sin ellas, para los parametros que hay que pasarles (las rutas de directorios, ficheros, etc...) si contienen espacios hay que rodearlos con comillas para que no piense que son varios parametros, por ejemplo cat /sdcard/mi archivo.txt habría que ejecutarlo como cat "/sdcard/mi archivo.txt" y cp /sdcard mi archivo.txt /sdcard/mi otro archivo.txt sería cp "/sdcard mi archivo.txt" "/sdcard/mi otro archivo.txt"

  • cd: cambia al directorio especificado, por ejemplo "cd /sdcard" situa el directorio actual a la raíz de la tarjeta sd (todos los que hayais vivido la epoca MS-DOS os sonará este )
  • pwd: devuelve la ruta del directorio actual
  • ls: devuelve una lista de los ficheros y carpetas del directorio actual, si se le pasa un directorio (por ejemplo "ls /sdcard" devuelve una lista con los directorios y ficheros dentro de esa carpeta)
  • cp: copia un archivo, hay que pasarle la ruta del archivo origen y el destino, por ejemplo: "cp /sdcard/hola.txt /sdcard/hola2.txt" crea una copia de "hola.txt" y la llama "hola2.txt"
  • rm: borra un archivo (con este hay que ir con cuidado ;-)) por ejemplo "rm /sdcard/hola.txt"
  • cat:devuelve el contenido del fichero especificado, por ejemplo si tienes un fichero "hola.txt" en la raiz de la tarjeta SD "cat sdcard/hola.txt"mostrará el contenido del fichero
  • grep: filtra una entrada y devuelve solo las lineas que contenga el texto pasado (ver en apartado 6)
Aquí hay una lista de algunos comandos disponibles en Android.

Este tutorial pretende ser una introducción, los detalles concretos sobre el uso de todos estos comandos se pueden encontrar facilmente por internet

6. Obtener ayuda
Todos los comandos suelen tener una ayuda con una descripción de lo que hace el comando y las distintas opciones si las tiene.
Normalmente para ver esta ayuda se hace escribiendo en un terminal "comando -h" o "comando --help" (un guión cuando es una letra y 2 para la palabra completa).
Si no funciona ninguna de las dos formas (devolverán un error del tipo "no existe la opción" o algo así) algunos comandos muestran la ayuda al escribir el comando a secas, sin ninguna opción ni parametro, ojo no probar esto si un comando, por su nombre, podría tener sentido si se ejecuta sin parametros, ya que podría ejecutarse si hacemos esto.

7. Conceptos avanzados
Redirigir entrada y salida de comandos


- Entrada
Antes hemos visto por ejemplo el comando "cat" que muestra el contenido de un fichero, en el caso del ejemplo era un fichero que solo tiene un numero, pero podría ser un fichero de texto con muchas lineas y te interese solo una linea concreta o solo algunas cosas, para eso hay un comando muy util llamado "grep" que ilustra muy bien como redirigir la salida de un comando a la entrada de otro.


Pongamos un fichero de texto en /sdcard/fechahora.txt con este contenido:
Código:
Fecha: 08/05/2013
Hora: 10:00
Si hacemos
Código:
cat /sdcard/fechahora.txt
nos devolverá todo este texto, pero si hacemos
Código:
cat /sdcard/fechahora.txt | grep Hora
lo que pasará es que al poner el "|" entre ambos comandos, hará que el resultado del "cat" (todo el texto) sea la entrada del "grep" y al pasarle a este como parametro "Hora" solo dejará pasar las lineas que contengan la palabra "Hora" y la orden completa nos devolverá
Código:
Hora: 10:00
De esta forma podemos encadenar comandos haciendo que un comando utilice el resultado de otro como entrada

-Salida
Aunque Tasker nos permite con la acción de ejecutar un comando guardarnos su resultado en una variable para hacer con él lo que queramos, a veces nos podrá interesar guardar lo que devuelva un comando en un fichero, esto se puede hacer redirigiendo la salida del comando en vez de a la pantalla a un fichero, y esto se consigue poniendo "> ruta_fichero_destino.txt" despues del comando, por ejemplo, si ejecutamos
Código:
ls / > /sdcard/ls.txt
no mostrará nada por pantalla, pero lo que se hubiese mostrado (una lista de los directorios y ficheros contenidos en el directorio raíz /) se escribira en un fichero "ls.txt" que se creará en /sdcard.


Si se volviese a ejecutar lo mismo el fichero destino se sobreescribiría con el nuevo contenido, mientras que si ponemos ">>" en vez de ">" hace lo mismo pero en vez de sobreescribir el fichero, añade al final de este el resultado de la nueva ejecución (la primera vez lo crearía si no existiese igualmente)

Es mi primer tutorial (pretendo hacer alguno más con el tiempo si este tiene buena acogida ) así que acepto críticas constructivas sobre si pensais que debo explicar mejor o ahondar en alguna cosa

Última edición por maid450 Día 06/02/14 a las 08:57:18
Responder Con Cita
Los siguientes 17 usuarios han agradecido a maid450 su comentario:
[ Mostrar/Ocultar listado de agradecimientos ]


  #2  
Viejo 08/05/13, 11:18:49
Avatar de Juanmiwow
Juanmiwow Juanmiwow no está en línea
Teta-tester oficial
Mensajes: 4,607
Compra y venta: (1)
 
Fecha de registro: sep 2011
Localización: Madrid
Mensajes: 4,607
Modelo de smartphone: Xiaomi Mi5 / Xiaomi Mi Pad
Versión de ROM: ¡Depende del día!
Versión de Radio: 69.G
Tu operador: Vodafone
Mencionado: 43 comentarios
Tagged: 0 hilos
Brutal! Mil gracias!
Responder Con Cita
Gracias de parte de:
  #3  
Viejo 09/05/13, 02:36:06
Avatar de Caravantes
Caravantes Caravantes no está en línea
Usuario muy activo
Mensajes: 2,200
Compra y venta: (1)
 
Fecha de registro: feb 2011
Mensajes: 2,200
Modelo de smartphone: Samsung Galaxy S9
Versión de ROM: Android 8
Tu operador: Lowi
Mencionado: 59 comentarios
Tagged: 4 hilos
Exelente, Maid, muchas gracias. No me he perdido en absoluto, creo que está muy bien explicado.

Cita:
Originalmente Escrito por maid450 Ver Mensaje
Tasker tiene predefinida una acción en "Script -> Run shell" (lo tengo en inglés, no sé como será en español)...
En la versión española (4.0) el grupo también se llama "Script", y la acción se llama "Ejecutar consola" (otras acciones de ese grupo Script son "Ejecutar script", "JavaScript" y "JavaScriptlet").
La acción Ejecutar-consola tiene los siguientes parámetros o elementos especiales (sigo traduciendo para atajar posibles dudas):
- Comando (texto, obligatorio)
- Cuenta atrás en segundos (timeout; por defecto es cero, máximo 120)
- Usar Root (opcional)
- Almacenar Salida En (una variable, opcional)
- Almacenar Errores En (una variable, opcional)
- Almacenar Resultado En (una variable, opcional)
- Continuar Tarea Tras Error (opcional)

Creo que ya lo puedo aplicar al caso que me interesaba. En mitad de una tarea yo quería poner una condición para saber si la app Poweramp estaba funcionando y en tal caso no ejecutar algunas acciones de ajuste de volumen. El package-name es "com.maxmpz.audioplayer".
Creo una tarea de prueba con las siguientes acciones
1 Ejecutar-consola
- Comando: pgrep com.maxmpz.audioplayer
- Almacenar Salida En %salida
- Continuar Tarea Tras Error: activado
2 Si %salida ~ %*
3 Notificación: Poweramp NO encontrado (%salida)
4 Else
5 Notificación: Poweramp SI encontrado (%salida)
6 Fin si (End if)

Lo pruebo antes de ejecutar Poweramp y la notificación dice Poweramp NO encontrado (%salida)
Ejecuto Poweramp y mientras oigo música vuelvo a ejecutar la tarea, obteniendo Poweramp SI encontrado (20687).
Fantástico.
Todavía no es perfecto: cuando paro la música y "cierro" el Poweramp (pulsando atrás), android lo sigue teniendo como activo, con el mismo PID (20687), no sé cuanto rato tiene que pasar para que eso cambie. Puedo quitar el Poweramp de la lista de apps recientes (sistema de conmutación entre tareas que tiene Android4) y entonces ya deja de tener PID (Poweramp NO encontrado).

Tienes todo mi apoyo y ánimo para continuar con más lecciones porque creo que has abierto una veta muy prometedora. Al menos yo estoy muy interesado. Gracias de nuevo.
Responder Con Cita
Gracias de parte de:
  #4  
Viejo 09/05/13, 08:29:10
Avatar de KchoPrro
KchoPrro KchoPrro no está en línea
Miembro del foro
Mensajes: 400
 
Fecha de registro: sep 2012
Localización: Sevilla
Mensajes: 400
Modelo de smartphone: Samsung Galaxy S7
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
Impresionante, hasta yo que soy un cibercateto lo he entendido!
Responder Con Cita
  #5  
Viejo 09/05/13, 09:01:35
Avatar de maid450
maid450 maid450 no está en línea
Miembro del foro
Mensajes: 450
 
Fecha de registro: sep 2009
Localización: Valencia
Mensajes: 450
Modelo de smartphone: Nexus 5 / Nexus 7
Versión de Radio: Cualquiera que ponga buen Rock
Tu operador: Yoigo
Mencionado: 15 comentarios
Tagged: 0 hilos
Cita:
Originalmente Escrito por Caravantes Ver Mensaje
Todavía no es perfecto: cuando paro la música y "cierro" el Poweramp (pulsando atrás), android lo sigue teniendo como activo, con el mismo PID (20687), no sé cuanto rato tiene que pasar para que eso cambie.
El tema es que el proceso va a seguir teniendo PID mientras esté en cualquier estado de ejecución, incluyendo algunos estados que para nosotros es que la aplicación está cerrada, pero el sistema los mantiene "latentes" para relanzarlos más rápido en caso necesario

La tarea que has hecho está bien para entender un poco el tema de los PIDs y tal, pero para comprobar si la aplicación está realmente activa o no lo que tienes que ver es el valor que hay en el fichero /proc/%PID/oom_adj y para eso es el comando completo:
Código:
cat /proc/$(pgrep jackpal.androidterm$)/oom_adj
si eso devuelve 0 o 2 es que el poweramp está en primer o segundo plano, si devuelve cualquier otra cosa es que está en un estado que podemos considerar como inactivo.

Esto se puede hacer en tasker con un Si %salida ~ 0/2
Responder Con Cita
Gracias de parte de:
  #6  
Viejo 09/05/13, 13:48:23
Avatar de ATaskREADOS
ATaskREADOS ATaskREADOS no está en línea
Miembro del foro
Mensajes: 180
 
Fecha de registro: ene 2013
Mensajes: 180
Tu operador: Otra
Mencionado: 0 comentarios
Tagged: 1 hilos
Im-presionante!!
Pues no sólo te subimos el tuto al recopilatorio si no que además inaugura sección.

Muchas gracias maid450.

FDO: Mlesir.
Responder Con Cita
  #7  
Viejo 09/05/13, 21:43:23
Avatar de Caravantes
Caravantes Caravantes no está en línea
Usuario muy activo
Mensajes: 2,200
Compra y venta: (1)
 
Fecha de registro: feb 2011
Mensajes: 2,200
Modelo de smartphone: Samsung Galaxy S9
Versión de ROM: Android 8
Tu operador: Lowi
Mencionado: 59 comentarios
Tagged: 4 hilos
Cita:
Originalmente Escrito por maid450 Ver Mensaje
La tarea que has hecho está bien para entender un poco el tema de los PIDs y tal, pero para comprobar si la aplicación está realmente activa o no lo que tienes que ver es el valor que hay en el fichero /proc/%PID/oom_adj y para eso es el comando completo:
Código:
cat /proc/$(pgrep jackpal.androidterm$)/oom_adj
Efectivamente, acabo de probarlo de esta forma y parece que funciona perfectamente, muchas gracias.
Responder Con Cita
  #8  
Viejo 11/05/13, 01:45:24
Avatar de Caravantes
Caravantes Caravantes no está en línea
Usuario muy activo
Mensajes: 2,200
Compra y venta: (1)
 
Fecha de registro: feb 2011
Mensajes: 2,200
Modelo de smartphone: Samsung Galaxy S9
Versión de ROM: Android 8
Tu operador: Lowi
Mencionado: 59 comentarios
Tagged: 4 hilos
Resumiendo y concretando el tema de detectar otra aplicación, para dummies: en una tarea de Tasker podemos saber si otra app concreta está funcionando, ya sea en primer plano o en segundo plano, y dependiendo de eso se pueden tomar decisiones dentro de la tarea. Los detalles son los siguientes.

En primer lugar hay que conocer el nombre que la aplicación tiene dentro de Android. Es lo que técnicamente se llama package name, y la forma más sencilla de obtenerlo es buscar la aplicación en la web de Google play y fijarse en la URL del navegador: el package name es lo que aparece tras el "id=" (y antes del primer "&", si es que lo hubiera).
Por ejemplo, para la app Android Terminal Emulator la URL puede ser
https://play.google.com/store/apps/details?id=jackpal.androidterm
o algo más largo como por ejemplo
https://play.google.com/store/apps/details?id=jackpal.androidterm&feature=nav_result#?t=W251bGwsMSwyLDNd
Pues bien, en ambos casos se ve que el package name es
jackpal.androidterm
De forma similar, debes obtener el package name de la app que tú quieras controlar.

Ya en Tasker, hay que usar la acción (del grupo Script) llamada Ejecutar-consola. En la casilla del Comando ponemos
cat /proc/$(pgrep jackpal.androidterm$)/oom_adj
sustituyendo jackpal.androidterm por el package name de la aplicación que hayas elegido. La acción Ejecutar-consola tiene, más abajo, una casilla rotulada como Almacenar Salida En ; ahí podremos el nombre de una variable que recoja la información devuelta por el comando; por ejemplo podemos escribir %salida.
Y bastante más abajo hay que marcar una opción que lleva el rótulo Continuar Tarea Tras Error.

Con eso ya hemos terminado de configurar esta acción. Cuando la tarea se active, Android ejecutará el comando y devolverá una u otra información según sea el estado de la aplicación. A los efectos que nos interesa, si la app está ejecutándose (en primer o segundo plano) el comando devolverá o bien el valor 0 (cero) o bien el valor 2 (dos). O sea que, a continuación, podemos usar en la misma tarea una condición en base a la variable que hayamos usado, del tipo siguiente
Si(If) %salida ~ 0/2
(Si %salida coincide con cero o dos) que será cierta si la app se está ejecutando. O bien podemos usar una condición del tipo contrario
Si %salida !~ 0/2
(si %salida no coincide con cero o dos) que será cierta si la app no se está ejecutando.

Eso es todo. Si quieres más información, lee este hilo desde el inicio, y/o la página siguiente:
http://www.htcmania.com/showthread.p...95#post7356195
Responder Con Cita
Gracias de parte de:
  #9  
Viejo 12/06/13, 14:15:31
Avatar de diapa68
diapa68 diapa68 no está en línea
Miembro del foro
Mensajes: 194
 
Fecha de registro: feb 2013
Mensajes: 194
Modelo de smartphone: samsung galaxy s2
Versión de ROM: HCT V8, Apolo regular
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
Hola a todos.
Estoy en fase de lectura de este subforo y aprendiendo cosas que por mí solo no he sido capaz de hacer.
He realizado perfiles de los más básicos, pero estoy intentando aprender para cosas más complejas.
Gracias a este hilo he podido hacer lo que hacía tiempo intentaba sin éxito, que al abrir una aplicación que necesite GPS lo active y que cuando salga lo desactive. El problema lo encontraba cuando se quedaba la aplicación en segundo plano y desactivaba el GPS.

Solucionado gracias a este aporte!!!!

Lo dicho, seguiré leyendo, aprendiendo y agradeciendo. Y si algún día puedo, aportando.
Responder Con Cita
Gracias de parte de:
  #10  
Viejo 12/06/13, 17:33:06
Avatar de Caravantes
Caravantes Caravantes no está en línea
Usuario muy activo
Mensajes: 2,200
Compra y venta: (1)
 
Fecha de registro: feb 2011
Mensajes: 2,200
Modelo de smartphone: Samsung Galaxy S9
Versión de ROM: Android 8
Tu operador: Lowi
Mencionado: 59 comentarios
Tagged: 4 hilos
Cita:
Originalmente Escrito por diapa68 Ver Mensaje
Estoy en fase de lectura de este subforo
Hola Diapa. Bienvenido al foro de Tasker.
Si todavía no lo has hecho, te sugiero la lectura de las "Recomendaciones para participar"
http://www.htcmania.com/showthread.php?p=8982303

Nos alegramos de que aquí encuentres cosas interesantes, y de que lo comentes.
Responder Con Cita
Gracias de parte de:
  #11  
Viejo 13/06/13, 13:41:06
Avatar de diapa68
diapa68 diapa68 no está en línea
Miembro del foro
Mensajes: 194
 
Fecha de registro: feb 2013
Mensajes: 194
Modelo de smartphone: samsung galaxy s2
Versión de ROM: HCT V8, Apolo regular
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
Puesto manos a la obra, me he encontrado un problema.
Con una aplicación, ejecuto el comando en la consola, lo guardo en una variable (%salida) y lanzo un flash con texto %salida. Como tarea de salida de la aplicación, lanzo otro flash con la misma variable para esperar el 2 cuando esté en segundo plano.
Cuando abro la aplicación me da 0 en el flash. Hasta ahí bien, pero cuando le doy al botón home para ir al escritorio y dejarla en segundo plano (queda el icono en la barra de notificaciones y la apli sigue corriendo -es un informador de radares- y funcionando) el flash que me lanza es %salida. No hay 2 con lo que no me apaga el gps cuando le pongo el condicionante "si %salida es distinto a 0/2" apaga gps.

¿?¿?¿?

Saludos.
Responder Con Cita
  #12  
Viejo 13/06/13, 16:39:36
Avatar de mlesir
mlesir mlesir no está en línea
Usuario muy activo
Mensajes: 2,263
 
Fecha de registro: abr 2012
Mensajes: 2,263
Modelo de smartphone: OnePlus One,BQ Edison1, GoogleChrome,
Versión de ROM: 4.4 Cyanogen
Tu operador: Pepephone
Mencionado: 36 comentarios
Tagged: 2 hilos
Aunque yo este script no lo controlo te aconsejaría que hagas lo q se debe hacer siempre que algo no funciona: probar todas las partes de manera aislada.
Primero prueba el script por si solo a ver si efectivamente te detecta q la app esta en segundo plano.
Luego las distintas partes del perfil, puedes ir poniendo pop up con las variables que utilices como texto del pop up, para ir viendo q valores van tomando. De esta manera sabrás que parte es la que falla.
Responder Con Cita
  #13  
Viejo 13/06/13, 18:30:52
Avatar de maid450
maid450 maid450 no está en línea
Miembro del foro
Mensajes: 450
 
Fecha de registro: sep 2009
Localización: Valencia
Mensajes: 450
Modelo de smartphone: Nexus 5 / Nexus 7
Versión de Radio: Cualquiera que ponga buen Rock
Tu operador: Yoigo
Mencionado: 15 comentarios
Tagged: 0 hilos
Cita:
Originalmente Escrito por diapa68 Ver Mensaje
el flash que me lanza es %salida. No hay 2 con lo que no me apaga el gps cuando le pongo el condicionante "si %salida es distinto a 0/2" apaga gps.
Hola diapa68, entiendo que quieres decir que si que apaga el GPS cuando no debería ya que "%salida" es distinto a 0/2 y la aplicación aún sigue en ejecución...

Cuando el valor de %salida es "%salida" significa que la variable no está definida, y si se ha ejecutado el comando esto solo puede pasar en caso de que el comando devuelva un error.
En principio no tiene porqué ser malo ya que una de las posibilidades al ejecutar el script es que la aplicación objetivo no esté en ningún estado de ejecución y por tanto no exista el fichero "/proc/xxxxx/oom_adj" y devolvería un error (por eso en la acción hay que marcar "continuar tarea tras error") aunque si la app está en segundo plano esto no debería pasar y el error podría ser otra cosa debido a que haya algo mal.

Lo que puedes hacer para encontrar el error es:
- lanzar la aplicación en cuestión.
- salir sin cerrarla, dejándola en segundo plano
- abrir el emulador de terminal (en el primer post recomiendo uno)
- lanzar el comando manualmente (copia el comando desde tasker y pegalo en el emulador de terminal)

Así verás lo que devuelve el comando, y si es un error debería describir que es lo que pasa.
Ya comentas que tal!
Responder Con Cita
  #14  
Viejo 14/06/13, 08:54:47
Avatar de diapa68
diapa68 diapa68 no está en línea
Miembro del foro
Mensajes: 194
 
Fecha de registro: feb 2013
Mensajes: 194
Modelo de smartphone: samsung galaxy s2
Versión de ROM: HCT V8, Apolo regular
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
Bueno, pues un problema solucionado. Gracias por las respuestas, al leerlas se me ocurrió la solución.
Explico:
Tenía como evento "aplicación-CamSam" (informador de radares)
Como tareas:
1. GPS on
2. Ejecutar consola (comando para que mandara la respuesta a %camsam, continuar tarea tras error: activado)
3. Flash %camsam

Al abrir la apli todo bien y flash informando un 0.

Como tareas de salida (aquí estaba el error)
1.Flash %camsam (para verificar el cambio)
2.Si %camsam es distinto que 0/2
3.GPS off
4.Fin si

Me daba error: cuando la ponía en segundo plano el flash me marcaba "%camsam" y no el 2 esperado. Por lo consiguiente, me apagaba el GPS cuando no era lo que quería.

Con vuestras respuestas caí en que el cambio en la variable no se producía a 2 porque simplemente no había vuelto a ejecutar en la consola el comando (ví, como aconsejabais, que con la apli en segundo plano y abriendo el terminal me respondía con el 2 pero en la variable no lo cambiaba)

Solución:

Como tarea simplemente GPS on

Tareas de salida:
1.Ejecutar consola (comando para que mandara la respuesta a %camsam, continuar tarea tras error: activado)
2.Si %camsam es igual que 0/2
3.GPS on
4.Else
5. GPS off
6. Fin si

Y a funcionar perfectamente.


Muchas gracias!!!!!

Problema nuevo: cuando quiero hacer lo mismo con el Endomondo no me ejecuta bien el comando. Tengo la sensación que el nombre que da el Google Play en su URL no es el correcto para el comando porque da error cuando lo ejecuto directamente en el terminal teniendo el Endomondo abierto.

Hay alguna manera de ver qué aplicaciones corren en segundo plano con el Tasker?? porque esa sería otra solución.

Muchas gracias. La verdad es que me apasiona el Tasker y quiero sacarle todo el jugo que pueda, pero estoy todavía muy verde.
Responder Con Cita
  #15  
Viejo 18/06/13, 11:41:21
Avatar de diapa68
diapa68 diapa68 no está en línea
Miembro del foro
Mensajes: 194
 
Fecha de registro: feb 2013
Mensajes: 194
Modelo de smartphone: samsung galaxy s2
Versión de ROM: HCT V8, Apolo regular
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
Hay algún comando que me diga qué aplicaciones hay en segundo plano? Es que con el Endomondo no hay forma que funcione el comando que me da la URL del Google Play.
Gracias.
Saludos.
Responder Con Cita
  #16  
Viejo 18/06/13, 12:18:46
Avatar de maid450
maid450 maid450 no está en línea
Miembro del foro
Mensajes: 450
 
Fecha de registro: sep 2009
Localización: Valencia
Mensajes: 450
Modelo de smartphone: Nexus 5 / Nexus 7
Versión de Radio: Cualquiera que ponga buen Rock
Tu operador: Yoigo
Mencionado: 15 comentarios
Tagged: 0 hilos
Cita:
Originalmente Escrito por diapa68 Ver Mensaje
Hay algún comando que me diga qué aplicaciones hay en segundo plano? Es que con el Endomondo no hay forma que funcione el comando que me da la URL del Google Play.
Puedes usar el comando "ps" que devuelve información de todos los procesos en ejecución.
Sale mucha morralla del sistema, pero también salen los programas en ejecución en primer o segundo plano.
Responder Con Cita
  #17  
Viejo 18/06/13, 12:30:59
Avatar de diapa68
diapa68 diapa68 no está en línea
Miembro del foro
Mensajes: 194
 
Fecha de registro: feb 2013
Mensajes: 194
Modelo de smartphone: samsung galaxy s2
Versión de ROM: HCT V8, Apolo regular
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
Cita:
Originalmente Escrito por maid450 Ver Mensaje
Puedes usar el comando "ps" que devuelve información de todos los procesos en ejecución.
Sale mucha morralla del sistema, pero también salen los programas en ejecución en primer o segundo plano.
Muchas gracias. Iba a editar mi comentario, pues leyendo en Noticias, sugerencias... he visto que hay un plugin de App locale condition. Había visto esta app pero, aunque el pago era ridículo, no la había comprado por si no era lo que necesitaba, pero creo que podría valerme. De todas formas probaré ese comando y usar variables y de paso aprendo.

Saludos.
Responder Con Cita
  #18  
Viejo 19/06/13, 16:29:25
Avatar de UnicornioNegro
UnicornioNegro UnicornioNegro no está en línea
Miembro del foro
Mensajes: 145
Compra y venta: (1)
 
Fecha de registro: feb 2013
Mensajes: 145
Modelo de smartphone: S25 Ultra
Versión de ROM: Android 15
Tu operador: O2
Mencionado: 2 comentarios
Tagged: 0 hilos
Acabo de leerlo, y está muy bien explicado, los que estamos aprendiendo un poco a usar tasker te lo agradecemos...
Responder Con Cita
Gracias de parte de:
  #19  
Viejo 20/06/13, 00:34:53
Avatar de Caravantes
Caravantes Caravantes no está en línea
Usuario muy activo
Mensajes: 2,200
Compra y venta: (1)
 
Fecha de registro: feb 2011
Mensajes: 2,200
Modelo de smartphone: Samsung Galaxy S9
Versión de ROM: Android 8
Tu operador: Lowi
Mencionado: 59 comentarios
Tagged: 4 hilos
Cita:
Originalmente Escrito por UnicornioNegro Ver Mensaje
los que estamos aprendiendo un poco a usar tasker te lo agradecemos
Hola Unicornio. Creo que no te he visto antes por aquí. Bienvenido al foro de Tasker. Si todavía no lo has hecho, te sugiero la lectura de las "Recomendaciones para participar"
http://www.htcmania.com/showthread.php?p=8982303
Responder Con Cita


  #20  
Viejo 16/08/13, 22:05:58
Avatar de mlesir
mlesir mlesir no está en línea
Usuario muy activo
Mensajes: 2,263
 
Fecha de registro: abr 2012
Mensajes: 2,263
Modelo de smartphone: OnePlus One,BQ Edison1, GoogleChrome,
Versión de ROM: 4.4 Cyanogen
Tu operador: Pepephone
Mencionado: 36 comentarios
Tagged: 2 hilos
sqlite3 /data/data/com.whatsapp/databases/wa.db "SELECT jid FROM wa_contacts WHERE unseen_msg_count>'0' ORDER BY id DESC ;"

Alguien sabría decirme como hacer en este tipo de sentencias para que los resultados me los devuelva separados por comas, o por otro signo?
Es que los devuelve pero separados por intro y eso tasker no lo detecta.
Responder Con Cita
Respuesta

Estás aquí
Regresar   HTCMania > Todo sobre Android > Otro software para Android > Tasker


Reglas de Mensajes
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Las caritas están On
Código [IMG] está On
Código HTML está Off

Saltar a Foro



Hora actual: 20:46:07 (GMT +1)

Cookies settings
Powered by vBulletin™
Copyright © vBulletin Solutions, Inc. All rights reserved.
 
HTCMania: líderes desde el 2007