PDA

Ver la Versión Completa : [ SOLUCIONADO ] Velocímetro desplazable para Google Maps


emiegna
20/05/18, 20:01:03
Bueno, la idea no es otra que crear un velocímetro desplazable a nuestro antojo por la ventana de Google Maps. Os pongo en antecedentes:

https://www.htcmania.com/showthread.php?p=28813628#post28813628

emiegna
20/05/18, 20:49:00
¿Que pasa cuando Maps entra en modo navegación? Nada mas abrir Maps ya tenemos el icono del Gps "fululando" en la barra de tareas... Creo que por ahi quieres que indague, no? Ya empezamos con mis temidas variables, y prácticamente Tasker = Variables + Matemáticas

Edito: Cuando entramos en modo navegación se muestra un icono en la barra de estado. A la izquierda. ¿google.navigation? En modo navegacion el Velocímetro cabe perfectamente en la barra de abajo donde se indica la hora de llegada y demas datos... ¿Desplazable entonces? ¿Para qué?

WillyWeb
20/05/18, 21:21:13
¿Que pasa cuando Maps entra en modo navegación? Nada mas abrir Maps ya tenemos el icono del Gps "fululando" en la barra de tareas...

Pero eso no te vale. Necesitas un "evento" que se produzca solamente al comenzar la navegación.

Gracias por intentarlo. Sigue jugando. :gracias:

Edito: Cuando entramos en modo navegación se muestra un icono en la barra de estado. A la izquierda.

Caliente .. caliente ... caliente ... :aplausosfeliz:

¿Ese icono qué será y cómo se podrá detectar desde Tasker? :pensando:

En modo navegacion el Velocímetro cabe perfectamente en la barra de abajo donde se indica la hora de llegada y demas datos... ¿Desplazable entonces? ¿Para qué?

Por diversión, naturalmente. X-D

emiegna
21/05/18, 09:33:52
Eres un cachondo... :D Por diversión, dice... :ok: Pues mira, quizas no estaria mal que en un principio se muestre el velocímetro (sobre fondo transparente) junto a los datos de hora de llegada, etc... y tener en cualquier momento la oportunidad de sacarlo de ahi (desplazarlo) para situarlo en otras posiciones.

Igual no estoy tan lejos de sacar el contexto del perfil (creo). Estoy en ello...

emiegna
21/05/18, 12:40:09
Creo que va por tema de intent (ni idea). Estoy mirando cosas... android.intent.action.VIEW, google.navigation, etc.

Creo que va por ahí...

WillyWeb
21/05/18, 14:22:55
Creo que va por tema de intent (ni idea). Estoy mirando cosas... android.intent.action.VIEW, google.navigation, etc.

Creo que va por ahí...

Frío ... frío ... frío ... :crybaby:

Es mucho más fácil. :silbando:

¿Qué son esas cosas que hacen aparecer las aplicaciones en la barra de estado?

emiegna
21/05/18, 16:50:53
"La vida es como una caja de bombones..."

Es por tu culpa!! Daba por hecho que proviniendo de ti me iba a tener que licenciar en Matematicas o algo así!! :crybaby:

:D

En fin, corramos un tupido velo (otra vez)... :o

1. Contexto: Evento/Notificacion Maps. Tarea: Mostrar escena desplazable con velocímetro incorporado.

2. Contexto: Evento/Notificacion eliminada Maps. Tarea: Destruir escena.

Habrá ahora que darle forma. Realizar tarea velocímetro, Detener tarea, posicion horizontal, posicion vertical, se me ocurre que si hemos desplazado la escena, manteniendola pulsada regrese a su posición original, estética, publicidad, promoción y venta... ;-)

Me pongo a ello y voy informando.

WillyWeb
21/05/18, 17:07:44
1. Contexto: Evento/Notificacion Maps. Tarea: Mostrar escena desplazable con velocímetro incorporado.

2. Contexto: Evento/Notificacion eliminada Maps. Tarea: Destruir escena.

:aaaa:

Además del contexto de notificación yo añadiría uno de aplicación con "Maps". De esa forma te aseguras de que el velocímetro solamente aparece cuando realmente estés navegando y no cuando Maps tire cualquier otra notificación.

Y lo de "mantener pulsado para volver a posición inicial" ... a tu gusto ... :ok:

emiegna
21/05/18, 18:20:01
Buena idea lo de Maps. Seguridad.

¿Y los desplazamientos? ¿Pa donde? Imagino que no existen solo 4 opciones...

WillyWeb
21/05/18, 18:52:57
Imagino que no existen solo 4 opciones...

¿Es que tengo que hacerlo yo todo? :loco:

Coloca un flash de %strike_dir en la tarea que mueve la escena (en la pestaña "Golpe") y haz pruebas.

emiegna
22/05/18, 12:37:02
Bueno, ya he hecho algunas pruebas jugando con el valor de las variables. Creo, y digo creo, el proyecto no parece especialmente difícil. Llevará algún tiempo, eso si... Situar bien la escena en posición vertical y horizontal, tamaño, fuente, y posibles ubicaciones en los movimientos y alguna cosilla mas que me gustaría añadir. Eso si, mi resolución es 1920/1080. Poco a poco...

emiegna
23/05/18, 17:44:48
He creado una escena redonda en color verde (he conseguido el mismo color de Maps extrayendolo con Color Suite) y caracteres blancos... El velocimetro. Quiero ubicar la escena al inicio en un determinado lugar si el movil esta en posición vertical, y en otro lugar si está en posición horizontal. Eso lo consigo.

El problema está cuando inicio en posición vertical y giro luego a posición horizontal, o viceversa. Tarda mucho en recuperar las posiciones (segundos).

He probado en Propiedades de las tareas, prioridades, sin la tarea del velocimetro, etc. No doy con ello. Y he calibrado el acelerometro.

De momento tengo estos tres perfiles, aparte de la escena.

Perfil: OrientacionVertical (120)
Estado: Orientación Pantalla [ Está:Vertical ]
Entrada: VerticalON (121)
A1: Establecer variable [ Nombre:%Vert A:1 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]

Salida: VerticalOFF (123)
A1: Establecer variable [ Nombre:%Vert A:0 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]


Perfil: VelocimetroMapsON (112)
Evento: Notificación [ Aplicación origen:Maps Título:* Texto:* Subtext:* Messages:* Other Text:* Categ.:* New Only:Apagado ]
Aplicación: Maps
Entrada: VelocimetroMapsON (113)
A1: Realizar tarea [ Nombre:VelocimetroON/OFF Prioridad:%priority-1 Parámetro 1 (%par1):on Parámetro 2 (%par2): Devolver Valor de Variable: Detener:Apagado ]
A2: Si (if) [ %Vert ~ 1 ]
A3: Ocultar Escena [ Nombre:VelocimetroMaps Animación:Sistema ]
A4: Establecer variable [ Nombre:%posh A:10 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A5: Establecer variable [ Nombre:%posv A:173 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A6: Mostrar Escena [ Nombre:VelocimetroMaps Mostrar como:Capa Superpuesta, Bloqueada Posición Horizontal:%posh Posición Vertical:%posv Animación:Sistema Mostrar Botón Salida:Apagado Mostrar sobre bloqueo pantalla:Apagado Continuar tarea inmediatamente:Encendido ]
A7: Else
A8: Ocultar Escena [ Nombre:VelocimetroMaps Animación:Sistema ]
A9: Establecer variable [ Nombre:%posh A:5 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A10: Establecer variable [ Nombre:%posv A:155 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A11: Mostrar Escena [ Nombre:VelocimetroMaps Mostrar como:Capa Superpuesta, Bloqueada Posición Horizontal:%posh Posición Vertical:%posv Animación:Sistema Mostrar Botón Salida:Apagado Mostrar sobre bloqueo pantalla:Apagado Continuar tarea inmediatamente:Encendido ]
A12: Fin si (End if)


Perfil: VelocimetroMapsOFF (98)
Evento: Notificación eliminada [ Aplicación origen:Maps Título:* Texto:* Subtext:* Other Text:* Categ.:* ]
Aplicación: Maps
Entrada: VelocimetroMapsOFF (97)
A1: Destruir Escena [ Nombre:VelocimetroMaps ]
A2: Realizar tarea [ Nombre:VelocimetroON/OFF Prioridad:%priority Parámetro 1 (%par1):off Parámetro 2 (%par2): Devolver Valor de Variable: Detener:Apagado ]

WillyWeb
23/05/18, 18:53:39
El detector de cambio de orientación...

Perfil: OrientacionVertical (120)
Estado: Orientación Pantalla [ Está:Vertical ]
Entrada: VerticalON (121)
A1: Establecer variable [ Nombre:%Vert A:1 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
Salida: VerticalOFF (123)
A1: Establecer variable [ Nombre:%Vert A:0 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]

...reacciona de forma casi inmediata. Añade un pito corto después de asignar valor a %Vert y lo comprobarás.

El problema está en que ese cambio no pasa al velocímetro nada más que cuando Maps genera una nueva notificación, que es cuando muestras/repintas el velocímetro.

Perfil: VelocimetroMapsON (112)
Evento: Notificación [ Aplicación origen:Maps Título:* Texto:* Subtext:* Messages:* Other Text:* Categ.:* New Only:Apagado ]
Aplicación: Maps
Entrada: VelocimetroMapsON (113)

Deberías comprobar cada poco (unos cientos de milisegundos) si la orientación ha cambiado... :silbando:

Al margen de eso, la tarea se puede optimizar para que sea un poco más rápida...

VelocimetroMapsON (113)
A1: Si (if) [ %Vert ~ 1 ]
A2: Establecer variable [ Nombre:%posh A:10 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A3: Establecer variable [ Nombre:%posv A:173 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A4: Else
A5: Establecer variable [ Nombre:%posh A:5 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A6: Establecer variable [ Nombre:%posv A:155 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A7: Fin si (End if)
A8: Ocultar Escena [ Nombre:VelocimetroMaps Animación:Ninguna ]
A9: Mostrar Escena [ Nombre:VelocimetroMaps Mostrar como:Capa Superpuesta, Bloqueada Posición Horizontal:%posh Posición Vertical:%posv Animación:Sistema Mostrar Botón Salida:Apagado Mostrar sobre bloqueo pantalla:Apagado Continuar tarea inmediatamente:Encendido ]

Y si esto...

A1: Realizar tarea [ Nombre:VelocimetroON/OFF Prioridad:%priority-1 Parámetro 1 (%par1):on Parámetro 2 (%par2): Devolver Valor de Variable: Detener:Apagado ]

...lo haces para encender el GPS, te lo puedes ahorrar perfectamente. Maps ya lo enciende y Tasker se encarga de poner valores en todas las variables %LOCxxx sin que tengas que hacer nada.

emiegna
23/05/18, 22:19:06
En primer lugar, no sé si podras explicarme como haces para incluir mis citas o códigos en esos cuadros, o bien donde se explica :-)

Que reacciona de forma casi inmediata sí lo sé. De hecho es totalmente inmediato. En la tarea, en lugar de poner un else, pongo un segundo if (%Vert 1 o 2) y al girar el móvil en la misma ventana de Tasker pasa enseguida del verde al rojo y viceversa.

"Cuando Maps genera una nueva notificación". No te entendí. ¿Que nueva notificación? Siempre es la misma hasta que lo cierre. "Comprobar cada pocos segundos...". ¿No lo hace ya la tarea con el if %Vert ~ 1 y Else?

Probé lo de Ninguna en ocultar, porqué lo pensé. Pero obviamente no era eso. Pero ayudará, claro.

Y lo de realizar tarea del velocimetro... Es obsesion con la tarea aquella. Tienes toda la razon, es innecesario aqui. Y encima ralentiza.

WillyWeb
23/05/18, 22:57:08
En primer lugar, no sé si podras explicarme como haces para incluir mis citas o códigos en esos cuadros

En la barra de botones del editor de mensajes tienes un icono con un signo de almohadilla ... #

1100696

Si no ves la barra de botones cambia al editor avanzado (tienes un botón por debajo de la caja del mensaje).

1100695

"Cuando Maps genera una nueva notificación". No te entendí. ¿Que nueva notificación? Siempre es la misma hasta que lo cierre.

No. Maps envía una nueva notificación cada vez que cambia algo en las instrucciones de navegación (distancia, posición, indicación, etc.). Lo que pasa es que sustituye a la anterior y tú no lo aprecias, pero Tasker sí.

Pon un pito corto al principio de la tarea que lanzas al entrar en modo navegación y lo comprobarás.

"Comprobar cada pocos segundos...". ¿No lo hace ya la tarea con el if %Vert ~ 1 y Else?

No. Un IF hace su comprobación una vez y listo.

Probé lo de Ninguna en ocultar, porqué lo pensé. Pero obviamente no era eso. Pero ayudará, claro.

Sí. El paso de "Destruir" a "Mostrar" es algo más rápido.

emiegna
24/05/18, 10:41:15
Está claro que soy corto de "entendederas". Te digo lo que yo he entendido (mal entendido, porque nada de lo que he hecho funciona).

El perfil de Orientación vertical 1/0 funciona correctamente. Lo hace ademas bien rapido. Pongo el móvil el posición vertical y el valor pasa a 1. Lo pongo en horizontal y el valor para enseguida a 0. Ok.

El perfil del Velocimetro en Maps. Aqui lo que de momento importa es la notificación (notificaciones) que recibo de Maps. No es una, sino varias. El contexto se dispara cuando recibo una notificación, cada vez que recibo una notificación. Eso es lo que yo entiendo, y siempre he entendido. Un perfil cuyo contexto es un evento dispara la tarea nada mas que se produce el evento.

La tarea de este perfil... Esta se ejecuta cada vez que recibo una notificación. Eso es lo que yo entiendo, y siempre he entendido para casos de eventos (insisto).

Ahora bien, creo (y digo "creo") haberte entendido que esta tarea debe ejecutarse casi continuamente (cada milisegundos) para comprobar la verticalidad/horizontalidad del movil. Pues bien, y olvidate de la acción Realizar tarea Velocimetro (sobra), pongo al final de la tarea un Ir a accion 1 (if %Vert ~ 1... Else) y ya está. Ya se repite continuamente, y comprueba continuamente, no? (Po no)

Otra idea basada en lo que yo he entendido. Al principio de la tarea %Ntf = 1. If %Ntf ~ 1... resto de tarea... End if tarea :Ntf = 0. Y termino con Ir a accion 2 (if %Ntf ~ 1).

Pensé en Propiedades de la tarea, pero nada. Y me arroja Error Code 3, que no sé que significa, pero suena chungo.

Creo entender lo que dices, o al menos parte, pero cómo llevarlo a cabo... Supongo que será, quizas, porque no he entendido tanto como creo.

Vamos, que en cuestion de 1 hora estoy al 60% de batería :-)

Desgraciadamente para ti (y sobretodo para mi) supongo que esperarias este post. :-(

Este perfil es el que mas se aproxima a mis pretensiones... Pero sigue "parpadeando" y tardando unas milesimas de segundo en situarse la escena en su sitio al girar el móvil. Ademas, desconozco el consumo que supondria...

Perfil: VelocimetroMapsON (112)
Evento: Notificación [ Aplicación origen:Maps Título:* Texto:* Subtext:* Messages:* Other Text:* Categ.:* New Only:Apagado ]
Aplicación: Maps
Entrada: VelocimetroMapsON (113)
Abortar Tarea Existente
A1: Establecer variable [ Nombre:%Ntf A:1 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A2: Si (if) [ %Ntf ~ 1 ]
A3: Si (if) [ %Vert ~ 1 ]
A4: Ocultar Escena [ Nombre:VelocimetroMaps Animación:Ninguno ]
A5: Establecer variable [ Nombre:%posh A:10 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A6: Establecer variable [ Nombre:%posv A:173 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A7: Mostrar Escena [ Nombre:VelocimetroMaps Mostrar como:Capa Superpuesta, Bloqueada Posición Horizontal:%posh Posición Vertical:%posv Animación:Sistema Mostrar Botón Salida:Apagado Mostrar sobre bloqueo pantalla:Apagado Continuar tarea inmediatamente:Encendido ]
A8: Else
A9: Ocultar Escena [ Nombre:VelocimetroMaps Animación:Ninguno ]
A10: Establecer variable [ Nombre:%posh A:5 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A11: Establecer variable [ Nombre:%posv A:155 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A12: Mostrar Escena [ Nombre:VelocimetroMaps Mostrar como:Capa Superpuesta, Bloqueada Posición Horizontal:%posh Posición Vertical:%posv Animación:Sistema Mostrar Botón Salida:Apagado Mostrar sobre bloqueo pantalla:Apagado Continuar tarea inmediatamente:Encendido ]
A13: Fin si (End if)
A14: Establecer variable [ Nombre:%Ntf A:0 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A15: Fin si (End if)
A16: Ir a acción [ Tipo:Número Acción Número:2 Etiqueta: ] Si (if) [ %Ntf ~ 1 ]

Caravantes
24/05/18, 20:01:20
Perfil: OrientacionVertical (120)
Estado: Orientación Pantalla [ Está:Vertical ]
Entrada: VerticalON (121)
A1: Establecer variable [ Nombre:%Vert A:1 ...
Salida: VerticalOFF (123)
A1: Establecer variable [ Nombre:%Vert A:0 ...

La orientación de pantalla se puede controlar de dos maneras (al menos dos, que yo sepa). La más accesible es esa que has usado, mediante un perfil específico que solo sirve para detectar la orientación y sus dos tareas que guardan el resultado en una variable global.

El otro método no necesita un perfil ni dos tareas ni una variable global; el inconveniente es que necesita Root y creo que por eso a ti no te sirve pero lo pongo para conocimiento general.
En cualquier tarea se pueden insertar un par de acciones: la primera es un comando (ejecutar consola, como Root) que sirve para chequear la orientación (portrait=retrato, vertical; o bien landscape=paisaje, horizontal) y la segunda para tomar una decisión IF en función de lo que se haya detectado. Lo descubrió el compañero Maid450 y lo explicó en el siguiente post
https://www.htcmania.com/showthread.php?p=9213183#post9213183

WillyWeb
24/05/18, 20:12:13
El perfil del Velocimetro en Maps. Aqui lo que de momento importa es la notificación (notificaciones) que recibo de Maps. No es una, sino varias. El contexto se dispara cuando recibo una notificación, cada vez que recibo una notificación. Eso es lo que yo entiendo, y siempre he entendido. Un perfil cuyo contexto es un evento dispara la tarea nada mas que se produce el evento.

La tarea de este perfil... Esta se ejecuta cada vez que recibo una notificación. Eso es lo que yo entiendo, y siempre he entendido para casos de eventos (insisto).

Correcto. Y ese es justo el problema, que el evento se sigue produciendo incluso después de haberse mostrado el velocímetro por primera vez ... eso es algo que tienes que solucionar.

Ahora bien, creo (y digo "creo") haberte entendido que esta tarea debe ejecutarse casi continuamente (cada milisegundos) para comprobar la verticalidad/horizontalidad del movil.

No sólo para comprobar la verticalidad. También tienes que calcular la velocidad (como poco pasarla de m/s a k/h). Casi lo mismo que has hecho para el velocímetro de tu modo coche pero sin encender/apagar el GPS.

Pues bien ... pongo al final de la tarea un Ir a accion 1 (if %Vert ~ 1... Else) y ya está. Ya se repite continuamente, y comprueba continuamente, no? (Po no)

¿Seguro? :silbando:

Lo que hace ese bucle es ocultar y mostrar la escena (ese parpadeo indica que lo está haciendo).

El problema es que el bucle no debe ser para eso. Debe ser para actualizar el valor de la velocidad, que se tiene que ver en la escena, que se tiene que mostrar sólo una vez al generarse la primera notificación del modo de navegación de maps.

Desgraciadamente para ti (y sobretodo para mi) supongo que esperarias este post. :-(

Pues sí. Detecté el problema en mis primeras pruebas. Ahora que tú también lo has visto podemos seguir...

La tarea que reacciona a la notificación de maps muestra la escena y hace un bucle que calcula/actualiza el valor de %Velocidad (supongo que usarás ese variable). Te queda por solucionar el tema de que esa tarea se relanza con cada nueva notificación.

El movimiento de la escena con el dedo ya lo tenías resuelto con la minitarea de la pestaña "Golpe".

Por otro lado tienes un perfil que reacciona a los cambios de orientación y que tiene que cambiar las coordenadas de la escena.

Y para finalizar, cuando desaparezca la notificación de navegación de maps, tienes que interrumpir el bucle que calcula/actualiza %Velocidad y destruir la escena.

Creo que esos son los cuatro pasos fundamentales. :pensando:

WillyWeb
24/05/18, 20:17:45
El otro método no necesita un perfil ni dos tareas ni una variable global; el inconveniente es que necesita Root...

Acción > Pantalla > Probar pantalla > Tipo=Orientación

Con el mismo resultado (portrait=retrato, vertical; landscape=paisaje, horizontal) pero sin necesidad de root.

emiegna
24/05/18, 23:48:59
A ver, creo que el asunto va para largo. He probado bastantes cosas en función de lo que creo haber entendido y ninguna funciona. Ahora creo entender que la tarea sólo debe ejecutarse una sola vez, o bien la escena mostrarse solo una vez. Ya he probado con poner una acción detener. Cambiar de posición mostrar la escena. En fin, no pararía de contar cosas que he probado atendiendo a lo que he entendido. Y muchas de ellas probablemente absurdas. Seguiré intentandolo, pero como digo, por falta de tiempo irá para largo. Y quizas tenga que abandonar el proyecto. Cada vez se hace mas frustante.

Ya pongo en duda la creación de todo el proyecto, cuando sólo dudaba del inicio, no del resto. Pero bueno, ya voy a decir "creo"... Creo que el paso siguiente, lo del velocímetro no supondria gran problema. Lo del bucle ya me di cuenta luego. Tienes razon, WillyWeb. Otra cagada mia... Oculta-muestra-oculta-muestra... Parpadeo. Absurdo. El resto del proyecto creo que también lo dominaria.

He querido poner en práctica la acción Probar pantalla... Y otra cosa que no se hacer. Mira por donde. En la tarea del velocímetro de Maps pongo como primera accion Probar pantalla/Orientacion, almacenar en %Orientacion, if %Orientacion ~ vertical. Siguiente accion if %Orientacion ~ 1 Mostrar escena... Y na. Aquello no va. Ni con asteriscos, ni portrait, ni na.

En fin, horas y horas.

Seguiré intentando y probando. Si pasado un tiempo no consigo nada ya comentaré que abandono el proyecto.

Y sobretodo gracias por vuestra ayuda y paciencia. A los dos :ok:

WillyWeb
25/05/18, 10:23:09
He probado bastantes cosas en función de lo que creo haber entendido y ninguna funciona ... Y quizas tenga que abandonar el proyecto. Cada vez se hace mas frustante.

:oh:

Un problema, en apariencia sin solución por su complejidad, siempre se puede dividir en pequeñas porciones sencillas de solucionar.

El velocímetro sólo debe aparecer cuando se inicia el modo navegación de Maps. ¿Cómo detectamos que estamos en modo navegación de Maps?

Perfil: VelocimetroMapsON
Evento: Notificación [ Aplicación origen:Maps Título:* Texto:* Subtext:* Messages:* Other Text:* Categ.:* New Only:Apagado ]
Aplicación: Maps
Entrada: VelocimetroMaps

Perfil: VelocimetroMapsOFF
Evento: Notificación eliminada [ Aplicación origen:Maps Título:* Texto:* Subtext:* Other Text:* Categ.:* ]
Aplicación: Maps
Entrada: VelocimetroMaps

La tarea del velocímetro debería funcionar en bucle para recalcular la velocidad y detectar los cambios de orientación. La pega es que una tarea en bucle lanzada desde un perfil no se deja detener "fácilmente" por el tema de las prioridades. ¿Cómo paramos esa tarea en bucle al salir del modo navegación?

Tarea: VelocimetroMaps
Abortar Tarea Existente
Si (if) [ %caller1 ~ *on ]
... tarea iniciada desde el perfil VelocimetroMapsON ...
... BUCLE ...
Else
... tarea iniciada desde el perfil VelocimetroMapsOFF ...
Fin si (End if)

Nos hemos dado cuenta de que Maps genera notificaciones de navegación cada poco y la tarea se relanza cada vez. ¿Cómo hacemos para que la tarea sólo se ejecute una vez? Lo más fácil/efectivo es parar el perfil que detecta el modo navegación.

Tarea: VelocimetroMaps
Abortar Tarea Existente
Si (if) [ %caller1 ~ *on ]
... tarea iniciada desde el perfil VelocimetroMapsON ...
Estado del perfil [ Nombre:VelocimetroMapsON Establecer:Apagado ]
... BUCLE ...
Else
... tarea iniciada desde el perfil VelocimetroMapsOFF ...
Estado del perfil [ Nombre:VelocimetroMapsON Establecer:Encendido ]
Fin si (End if)

Queremos que la posición del velocímetro se adapte a los cambios de orientación. Podríamos hacer un perfil que reaccione a ese evento y actuar en consecuencia. O mejor, podríamos incluir la detección de la orientación en la misma tarea.

Probar Pantalla [ Tipo:Orientación Almacenar Resultado:%pantalla ]
Si (if) [ %pantalla ~ portrait ]
... vertical/retrato ...
Else
... horizontal/apaisado ...
Fin si (End if)

Eso lo tendríamos que colocar dentro del bucle de la tarea principal ajustando las coordenadas y repintando la escena solamente cuando se produzca un cambio de orientación.

Probar Pantalla [ Tipo:Orientación Almacenar Resultado:%pantalla ]
Si (if) [ %pantalla !~ %escena ]
Si (if) [ %pantalla ~ portrait ]
Establecer variable [ Nombre:%posh A:xxx ]
Establecer variable [ Nombre:%posv A:yyy ]
Else
Establecer variable [ Nombre:%posh A:xxx ]
Establecer variable [ Nombre:%posv A:yyy ]
Fin si (End if)
Ocultar Escena [ Nombre:VelocimetroMaps Animación:Ninguno Continuar Tarea Tras Error:Encendido ]
Mostrar Escena [ Nombre:VelocimetroMaps Mostrar como:Capa Superpuesta, Bloqueada Posición Horizontal:%posh Posición Vertical:%posv Animación:Ninguna Continuar tarea inmediatamente:Encendido ]
Establecer variable [ Nombre:%escena A:%pantalla ]
Fin si (End if)

Y naturalmente, dentro de ese bucle también tenemos que poner las acciones necesarias para calcular la velocidad, que es de lo que se trata. Afortunadamente esa parte ya la tenemos resuelta en la tarea del Velocímetro con ajuste gradual (https://www.htcmania.com/showthread.php?p=28810729#post28810729).

Lo de cambiar la posición de la escena tampoco debería ser un problema con lo que vimos en esta prueba de concepto (https://www.htcmania.com/showthread.php?p=28816178#post28816178).

Las siguientes acciones, colocadas en la pestaña "Golpe" del elemento que uses como receptor del movimiento, permiten el desplazamiento de cualquier escena, en cualquier dirección, para cualquier orientación y para cualquier resolución de pantalla. Si %posh/%posv tenían valor el movimiento será relativo a esa posición.

Probar Pantalla [ Tipo:Hardware Resolution Datos: Almacenar Resultado en:%res ]
Establece Array [ Matriz de Variables (array):%res Values:%res Separador:x ]
Establecer variable [ Nombre:%movh A:%stroke_len/%res1*200 Recurse Variables:Apagado Calcular:Encendido Añadir:Apagado ] Si (if) [ %stroke_dir ~ *left*/*right* ]
Establecer variable [ Nombre:%movv A:%stroke_len/%res2*200 Recurse Variables:Apagado Calcular:Encendido Añadir:Apagado ] Si (if) [ %stroke_dir ~ *up*/*down* ]
Restar de variable [ Nombre:%posh Valor:%movh Módulo (wrap around):0 ] Si (if) [ %stroke_dir ~ *left* ]
Sumar a variable [ Nombre:%posh Valor:%movh Módulo (wrap around):0 ] Si (if) [ %stroke_dir ~ *right* ]
Restar de variable [ Nombre:%posv Valor:%movv Módulo (wrap around):0 ] Si (if) [ %stroke_dir ~ *up* ]
Sumar a variable [ Nombre:%posv Valor:%movv Módulo (wrap around):0 ] Si (if) [ %stroke_dir ~ *down* ]
Establecer variable [ Nombre:%posh A:0 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ] Si (if) [ %posh < 0 ]
Establecer variable [ Nombre:%posh A:200 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ] Si (if) [ %posh > 200 ]
Establecer variable [ Nombre:%posv A:0 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ] Si (if) [ %posv < 0 ]
Establecer variable [ Nombre:%posv A:200 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ] Si (if) [ %posv > 200 ]
Ocultar Escena [ Nombre:%escene_name Animación:Ninguno Continuar Tarea Tras Error:Encendido ]
Mostrar Escena [ Nombre:%escene_name Mostrar como:Capa Superpuesta, Bloqueada Posición Horizontal:%posh Posición Vertical:%posv Animación:Ninguna Continuar tarea inmediatamente:Encendido ]


Ahora lo ponemos todo junto y ya lo tenemos casi resuelto. ¿Dónde está el problema? :rolleyes:

emiegna
25/05/18, 14:08:13
Hombre, ya me dirás... "¿Dónde está el problema?" Que tú propones un proyecto y que al final, por mi escasez de conocimientos y porque el hilo se convertiría (como bien diría Caravantes) en un interminable partido de tenis acabas llevandolo a cabo tú. Vamos, que has hecho ya el 99,99%. Y espera WillyWeb, que seguro que tendré problemas cuando lo ponga en pie...

Pienso que por lo menos aprendo, pero también que no me embarcaré mas en proyecto complejos hasta que mis conocimientos sean mayores. Asi que, o proyectos sencillitos (sencillitos para mi) o planteamiento de pequeñas dudas sobre proyectos sencillos que esté creando.

Ni de coña hoy, ni quizas mañana, llegaría a lo que has planteado. Se trata ahora, al menos, de entenderlo para aprender e intentar en la medida de lo posible ponerlo yo solo en pie... Que menos.

De momento ya tengo la primera duda... Con respecto al perfil que te pondré a continuación:

1. Giro el móvil y tarda en reaccionar la escena.

2. No entiendo el if de la acción 1, ni la acción 11

Perfil: VelocimetroMapsON (112)
Evento: Notificación [ Aplicación origen:Maps Título:* Texto:* Subtext:* Messages:* Other Text:* Categ.:* New Only:Apagado ]
Aplicación: Maps
Entrada: VelocimetroMapsON (113)
A1: Probar Pantalla [ Tipo:Orientación Datos: Almacenar Resultado en:%pantalla ] Si (if) [ %pantalla !~ %escena ]
A2: Si (if) [ %pantalla ~ portrait ]
A3: Establecer variable [ Nombre:%posh A:10 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A4: Establecer variable [ Nombre:%posv A:173 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A5: Else
A6: Establecer variable [ Nombre:%posh A:5 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A7: Establecer variable [ Nombre:%posv A:155 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A8: Fin si (End if)
A9: Ocultar Escena [ Nombre:VelocimetroMaps Animación:Ninguno Continuar Tarea Tras Error:Encendido ]
A10: Mostrar Escena [ Nombre:VelocimetroMaps Mostrar como:Capa Superpuesta, Bloqueada Posición Horizontal:%posh Posición Vertical:%posv Animación:Sistema Mostrar Botón Salida:Apagado Mostrar sobre bloqueo pantalla:Apagado Continuar tarea inmediatamente:Encendido ]
A11: Establecer variable [ Nombre:%escena A:%pantalla Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]

O bien ese primer if es realmente una accion aparte de la primera accion y por eso tu End if que yo he suprimido. Si es entonces un if aparte (como accion 2) obtengo el mismo resultado.

WillyWeb
25/05/18, 14:23:02
No te desesperes que nadie nace sabiendo. Precisamente de lo que se trata es de aprender de lo que hacen otros. Estudia cada parte y ya verás como no es para tanto.

Y esa "adaptación" que has hecho no funcionará. Lo tienes que escritor tal y como te lo he puesto. Tu primer error ... la ejecución de "Probar Pantalla" está condicionada y se tiene que ejecutar siempre.

WillyWeb
25/05/18, 16:46:20
Ni de coña hoy, ni quizas mañana, llegaría a lo que has planteado. Se trata ahora, al menos, de entenderlo para aprender e intentar en la medida de lo posible ponerlo yo solo en pie... Que menos.

De momento ya tengo la primera duda...

Al final no te lo he explicado...


01: Probar Pantalla [ Tipo:Orientación Almacenar Resultado:%pantalla ]
02: Si (if) [ %pantalla !~ %escena ]
03: Si (if) [ %pantalla ~ portrait ]
04: Establecer variable [ Nombre:%posh A:xxx ]
05: Establecer variable [ Nombre:%posv A:yyy ]
06: Else
07: Establecer variable [ Nombre:%posh A:xxx ]
08: Establecer variable [ Nombre:%posv A:yyy ]
09: Fin si (End if)
10: Ocultar Escena [ Nombre:VelocimetroMaps Animación:Ninguno Continuar Tarea Tras Error:Encendido ]
11: Mostrar Escena [ Nombre:VelocimetroMaps Mostrar como:Capa Superpuesta, Bloqueada Posición Horizontal:%posh Posición Vertical:%posv Animación:Ninguna Continuar tarea inmediatamente:Encendido ]
12: Establecer variable [ Nombre:%escena A:%pantalla ]
13: Fin si (End if)


Primero detectamos la orientación de la pantalla y la guardamos en %pantalla.

Luego comprobamos si %pantalla es distinto de %escena para actuar en consecuencia. La idea es que si la orientación de la pantalla es distinta a la que tenías cuando mostraste la escena la tienes que repintar de nuevo en las coordenadas correspondientes ... ¿lógico, no?

El IF de 03 a 09 asigna valor a %posh y %posv en función de la orientación (portrait = vertical).

Luego ocultamos la escena para mostrarla inmediatamente en las nuevas coordenadas.

Y para terminar guardamos en %escena la orientación que tiene la pantalla en ese momento. Mientras que %pantalla no cambie (ver 01) y sea diferente de %escena (ver 02) todo ese bloque no se vuelve a ejecutar.

¿Por qué funciona la primera vez? ... porque %pantalla contiene portrait o landscape y %escena está sin definir ... es decir, que no son iguales (ver 02), así que la escena se mostrará en el sitio que corresponda a la orientación de ese momento.

¿Más claro ahora? :rolleyes:

emiegna
25/05/18, 18:02:34
Te has explicado como un libro abierto. Gracias :-)

Que ganas de seguir metiendole mano al tema, pero llega el fin de semana (es curioso) y "me dejan" menos tiempo libre. Lo iré haciendo a ratos. Comprendiendo y poniendo en pie, claro. Hacer, hacer lo has hecho tu.

Tu creas una unica tarea y ahi metes mis dos tareas ON/OFF. Perfecto.

Estaba estudiando la tarea de la pestaña Golpe en la escena. Funcional genial. Es un lio, pero voy entendiendo.

Le meteré mano a la parte del velocimetro y te cuento.

Gracias por tus explicaciones, WillyWeb :-)

WillyWeb
25/05/18, 19:33:47
Que ganas de seguir metiendole mano al tema...

Pues claro que sí hombre. Si esto es muy entretenido. :thumbup:

Tu creas una unica tarea y ahi metes mis dos tareas ON/OFF. Perfecto.

Es lo mismo que hicimos con el velocímetro con aquello de los parámetros on/off y poder detener una tarea sin importar la prioridad.

Estaba estudiando la tarea de la pestaña Golpe en la escena. Funcional genial. Es un lio, pero voy entendiendo.

Pues vamos a aclararlo...

01: Probar Pantalla [ Tipo:Hardware Resolution Datos: Almacenar Resultado en:%res ]
02: Establece Array [ Matriz de Variables (array):%res Values:%res Separador:x ]
03: Establecer variable [ Nombre:%movh A:%stroke_len/%res1*200 Recurse Variables:Apagado Calcular:Encendido Añadir:Apagado ] Si (if) [ %stroke_dir ~ *left*/*right* ]
04: Establecer variable [ Nombre:%movv A:%stroke_len/%res2*200 Recurse Variables:Apagado Calcular:Encendido Añadir:Apagado ] Si (if) [ %stroke_dir ~ *up*/*down* ]
04: Restar de variable [ Nombre:%posh Valor:%movh Módulo (wrap around):0 ] Si (if) [ %stroke_dir ~ *left* ]
05: Sumar a variable [ Nombre:%posh Valor:%movh Módulo (wrap around):0 ] Si (if) [ %stroke_dir ~ *right* ]
06: Restar de variable [ Nombre:%posv Valor:%movv Módulo (wrap around):0 ] Si (if) [ %stroke_dir ~ *up* ]
07: Sumar a variable [ Nombre:%posv Valor:%movv Módulo (wrap around):0 ] Si (if) [ %stroke_dir ~ *down* ]
08: Establecer variable [ Nombre:%posh A:0 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ] Si (if) [ %posh < 0 ]
09: Establecer variable [ Nombre:%posh A:200 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ] Si (if) [ %posh > 200 ]
10: Establecer variable [ Nombre:%posv A:0 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ] Si (if) [ %posv < 0 ]
11: Establecer variable [ Nombre:%posv A:200 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ] Si (if) [ %posv > 200 ]
12: Ocultar Escena [ Nombre:%escene_name Animación:Ninguno Continuar Tarea Tras Error:Encendido ]
13: Mostrar Escena [ Nombre:%escene_name Mostrar como:Capa Superpuesta, Bloqueada Posición Horizontal:%posh Posición Vertical:%posv Animación:Ninguna Continuar tarea inmediatamente:Encendido ]

Cuando mueves el dedo sobre ciertos elementos de una escena es posible detectar ese movimiento (la pestaña "Golpe").

La longitud del movimiento del dedo se mide en puntos de pantalla, pero las coordenadas de posición de la escena usan una escala propia (0 - 100 - 200 = izq/arr - cen - dch/abj).

En tu caso los 1080x1920 puntos de pantalla equivalen a los 200x200 de esa escala que se inventa Tasker, así que un movimiento vertical de 540 puntos implica un desplazamiento vertical de 100 unidades (la mitad de los puntos = la mitad de la escala-escena) ... fácil. ;-)

La idea es convertir puntos a escala-escena para hacer desplazamientos proporcionales al movimiento del dedo. :pensando:

Detectamos la resolución de la pantalla y la guardamos en %res (tiene la forma 0000x0000) y luego dividimos %res usando como separador la "x" para tener la resolución vertical en %res1 y la horizontal en %res2.

En 03 y 04 hacemos una regla de tres para calcular la equivalencia entre puntos y escala-escena dependiendo si la dirección del movimiento es horizontal, vertical o diagonal. Eso se consigue poniendo las palabras clave entre asteriscos para detectarlas en el caso de que aparezcan combinadas. Los desplazamientos en diagonal no son precisos al 100% pero es una aproximación más que suficiente.

De 04 a 07 sumamos/restamos el movimiento h/v a la posición h/v según corresponda a la dirección del movimiento.

De 08 a 11 comprobamos que en las operaciones anteriores no se han sobrepasado los límites de la escala (0 a 200) y lo ajustamos si es necesario.

Y finalmente en 12/13 ocultamos la escena y la mostramos en las nuevas coordenadas.


¿A que no es tan complicado como parecía a simple vista? ;-)

Caravantes
26/05/18, 00:21:40
A ver, creo que el asunto va para largo. He probado bastantes cosas en función de lo que creo haber entendido y ninguna funciona.

Hola Emi.
Creo que uno de los problemas es que estás probando/intentnado demasiadas cosas a la vez, o un conjunto demasiado grande. Cuando yo he tenido dificultades de ese tipo, siempre me ha ido bien dividir el problema en partes más pequeñas para afrontar cada dificultad separadamente. Por ejemplo, dices que no te ha funcionado lo de PROBAR PANTALLA.

Yo me acabo de hacer una tarea sencilla para aprender a controlar eso.

1. Acción > Pantalla > Probar pantalla > Tipo=Orientación. Guardar el resultado en la variable %position.
2. Flash "%position Vertical" Si %position~*port*
3. Flash "%position Horizontal" Si %position~*land*

Pongo el smartphone en vertical y lanzo la tarea, que me muestra "portrait Vertical".
Pongo el smartphone en horizontal y lanzo la tarea, que me muestra "landscape Horizontal".
Correcto.

Si algo tan sencillo te da algún fallo seguramente sea por los asteriscos. Puedes eliminarlos si pones la palabra completa: portrait / landscape. Si pones los asteriscos tienes que asegurarte de no dejar ningún espacio a los lados del asterisco.
Otro posible fallo es escribir la variable con distinto nombre en unas y otras acciones. Para evitarlo yo suelo hacer copiar&pegar el nombre de la variable. Además, fíjate que he puesto en el flash la variable para que el Flash me muestre el contenido de esa variable, es una forma de asegurar: si la variable no contiene nada seguramente sea porque escribí mal el nombre.
Por último, cabe una posibilidad (muy remota) de que esto no funcione en tu smartphone, ya sea porque el hardware no incluye esta función o porque se haya averiado el sensor.

Todas estas comprobaciones, para cada cosa, te ocuparán un tiempo extra, pero luego sabes que puedes incorporarlo a tu proyecto con ciertas garantías.

Respecto al bucle y la escena, a ver si te sirve esta idea: haz que la escena se muestre en una de las primeras acciones de la tarea. Luego continúas con el resto de la tarea que se va a repetir en bucle. Al terminar las acciones del bucle haces un GOTO para reiniciar el bucle pero no dirijas el GOTO a la primera acción de la tarea, sino a la acción siguiente a la que muestra la escena. De esta forma la escena solo se muestra una vez al comienzo de la tarea y no se muestra en las siguientes ejecuciones del bucle.

Suerte, y vete comentando los progresos y/o cada una de las dificultades.

emiegna
26/05/18, 01:04:48
WillyWeb, te has explicado perfectamente. Lo he entendido para explicarselo yo a otra persona. El problema no eres tu. Soy yo. A veces no capto :-)

Por cierto, lei algo por ahi de upright, upleft, etc para movimientos diagonales...

Caravantes, he hecho la prueba con flash. Al menos el móvil funciona correcto. Pero no se porque el perfil me sigue funcionando mal. Es decir, enseguida que giro el móvil la escena no se muestra en las coordenadas fijadas. Puede tardar unos segundos. Y tienes razón, hay que ser muy "mijita" (como decimos en mi tierra) con Tasker, los nombres de las variables, espacios, etc. El mas mínimo error se paga caro :-) (es un decir). Lo primero que suelo hacer cuando algo no funciona es repasar todos esos aspectos.

Buena idea lo del GOTO. A ver si me pongo ya a ello. El fin de semana lo tengo complicado, pero buscaré huecos.

El perfil al que me refiero es el de WillyWeb. A vosotros os va bien (entiendo), pero no se porque a mi no si la prueba simple que he hecho con flash ha sido correcta y WillyWeb tiene el mismo movil que yo.

Perfil: VelocimetroMapsON (112)
Evento: Notificación [ Aplicación origen:Maps Título:* Texto:* Subtext:* Messages:* Other Text:* Categ.:* New Only:Apagado ]
Aplicación: Maps
Entrada: VelocimetroMapsON (113)
A1: Probar Pantalla [ Tipo:Orientación Datos: Almacenar Resultado en:%pantalla ]
A2: Si (if) [ %pantalla !~ %escena ]
A3: Si (if) [ %pantalla ~ portrait ]
A4: Establecer variable [ Nombre:%posh A:10 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A5: Establecer variable [ Nombre:%posv A:173 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A6: Else
A7: Establecer variable [ Nombre:%posh A:5 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A8: Establecer variable [ Nombre:%posv A:155 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A9: Fin si (End if)
A10: Ocultar Escena [ Nombre:VelocimetroMaps Animación:Ninguno Continuar Tarea Tras Error:Encendido ]
A11: Mostrar Escena [ Nombre:VelocimetroMaps Mostrar como:Capa Superpuesta, Bloqueada Posición Horizontal:%posh Posición Vertical:%posv Animación:Sistema Mostrar Botón Salida:Apagado Mostrar sobre bloqueo pantalla:Apagado Continuar tarea inmediatamente:Encendido ]
A12: Establecer variable [ Nombre:%escena A:%pantalla Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A13: Fin si (End if)

Edito: Caravantes, releyendo he visto que referido al GOTO comentas mostrar la escena una sola vez. Me pierdo... La escena ha de ocultarse y mostrarse de nuevo cada vez que giro. Es inevitable, que yo entienda.

WillyWeb
26/05/18, 09:34:58
Por cierto, lei algo por ahi de upright, upleft, etc para movimientos diagonales...

Eso ya está contemplado en la minitarea que mueve la escena con el dedo.

Pero no se porque el perfil me sigue funcionando mal. Es decir, enseguida que giro el móvil la escena no se muestra en las coordenadas fijadas. Puede tardar unos segundos.

Analiza el perfil...

Ejecuta la tarea "VelocimetroMapsON" cada vez que llegue una notificación de Maps mientras que la aplicación Maps está abierta.

Analiza la tarea...

Comprueba la orientación de la pantalla y muestra la escena "VelocimetroMaps" en una posición ajustada a la orientación ... y punto. La tarea ya no se ejecuta más veces hasta que se cumplen las condiciones del perfil, y eso pasa cada pocos segundos porque es cuando Maps genera una nueva notificación.

Añade un "ESPERAR" de 200 milisegundos y un "IR A" acción 1 y verás como sí que hace lo que esperas. Ten en cuenta que lo que estás probando es sólo una parte ese bucle que te he comentado en el post #21 (https://www.htcmania.com/showthread.php?p=28842676#post28842676) y lo estás haciendo fuera de contexto.

Caravantes
26/05/18, 18:50:44
Caravantes, releyendo he visto que referido al GOTO comentas mostrar la escena una sola vez. Me pierdo... La escena ha de ocultarse y mostrarse de nuevo cada vez que giro. Es inevitable, que yo entienda.

Creo que es culpa mía, que no he estado muy atento a algunos detalles de la conversación. Lo siento. Tenía la idea de que la tarea hacía más cosas. Veamos.

Parece que la única misión de la tarea es presentar la escena de forma acorde a la orientación del smartphone. En tal caso el bucle puede recorrer toda la tarea, pero solo debe quitar/reponer la escena cuando el dispositivo cambie la orientación. Si la orientación se mantiene igual que en la comprobación anterior es preferible no quitar/reponer la escena, para evitar los parpadeos (entre otros problemas). El cambio de orientación lo controlas con las variables %pantalla y %escena, tal como lo tienes en la última tarea que has copiado. Pero en esa tarea no has puesto ningún bucle, se recorre una sola vez y luego se acaba. ¿?

Es decir, enseguida que giro el móvil la escena no se muestra en las coordenadas fijadas. Puede tardar unos segundos.

Un poco de demora es normal en estos dispositivos, lo puedes comprobar teniendo abierto el navegador o la app de Youtube. Verás que reaccionan con cierto retardo al giro. Ese nivel de retardo va a ser imposible de evitar, según creo. Pero si tu tarea tiene más retardo...

Trata de averiguar si tanto retardo está ocasionado por la detección de la orientación o por otra cosa como podrían ser las acciones de quitar y reponer la escena. Sugerencia: Copias la tarea con un nombre nuevo. En la tarea nueva, sustituyes las acciones de quitar/reponer la escena por una acción BIP (pitido breve) y añades una segunda acción Flash que muestre "vertical/horizontal" según corresponda. Y luego pruebas a ver cómo se detectan los cambios de orientación con esta nueva tarea. Si en esta nueva tarea ves que hubiera menos retardo sería por cierta lentitud "intrínseca" de las acciones que quitan y reponen la escena. Si tienes el mismo retardo seguramente sea por el sensor o por la comunicación de Tasker con el sensor.

emiegna
27/05/18, 16:07:02
Nota: Ver post siguiente despues de este (creo que me voy enterando)

WillyWeb, ando intentando seguir al pie de la letra el post 21. Hay poca información sobre %caller1. Lo poco que he visto es una explicación tuya en la que interviene también Caravantes.

No sé si es *on, u *on*. En cualquier caso no me funciona. O bien *enter o *enter*. Tampoco me va.

Entiendo que es necesario el bucle, pero si lo sigo al pie de la letra (el post 21)se bloquea el móvil. Supongo que será por culpa del bucle. He tenido que desactivar Tasker.

La tarea (creo) debe empezar mostrando la escena en una ubicacion específica atendiendo a la orientación. Creo que luego (if %caller1 ~ *on) se repite la tarea únicamente si cambia de orientación, pero no volviendo a la accion 1 de la tarea, sino a %caller1 (¿Una "llamada" al comienzo de la la tarea?) y sino (Else) ¿?

Si apagamos el perfil (esta tarea pertenece a este perfil) para que no se repita la tarea ya no atenderia a los cambios de orientación.

En algún (o algunos... ) sitios me pierdo. Me pierdo demasiado. Lo que mejor entiendo es la tarea de la orientación y su bucle (espera de 200 ms e ir a acción 1).

Se que este primer perfil no es. He querido atender literalmente el post 21 y me equivoco, sin duda. (A continuación pongo 2 perfiles que entiendo sí funcionan). Todo ello sin añadir aun el asunto del velocímetro, claro. Aquí de momento solo estamos tratando la escena (ojú).

Perfil: VelocimetroMapsON (11)
Evento: Notificación [ Aplicación origen:Maps Título:* Texto:* Subtext:* Messages:* Other Text:* Categ.:* New Only:Apagado ]
Aplicación: Maps
Entrada: VelocimetroMaps (26)
Abortar Tarea Existente
A1: Probar Pantalla [ Tipo:Orientación Datos: Almacenar Resultado en:%pantalla ]
A2: Si (if) [ %pantalla !~ %escena ]
A3: Si (if) [ %pantalla ~ portrait ]
A4: Establecer variable [ Nombre:%posh A:10 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A5: Establecer variable [ Nombre:%posv A:173 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A6: Else
A7: Establecer variable [ Nombre:%posh A:5 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A8: Establecer variable [ Nombre:%posv A:155 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A9: Fin si (End if)
A10: Ocultar Escena [ Nombre:VelocimetroMaps Animación:Ninguno Continuar Tarea Tras Error:Encendido ]
A11: Mostrar Escena [ Nombre:VelocimetroMaps Mostrar como:Capa Superpuesta, Bloqueada Posición Horizontal:%posh Posición Vertical:%posv Animación:Sistema Mostrar Botón Salida:Apagado Mostrar sobre bloqueo pantalla:Apagado Continuar tarea inmediatamente:Encendido ]
A12: Establecer variable [ Nombre:%escena A:%pantalla Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A13: Fin si (End if)
A14: Si (if) [ %caller1 ~ *on ]
A15: Estado del perfil [ Nombre:VelocimetroMapsON Establecer:Apagado ]
A16: Ir a acción [ Tipo:Número Acción Número:14 Etiqueta: ]
A17: Else
A18: Estado del perfil [ Nombre:VelocimetroMapsON Establecer:Encendido ]
A19: Fin si (End if)

Sin embargo estos dos perfiles sí funcionan. ¿Cual es el problema, si en lo que propones también existe bucle y en consecuencia consumo?

Perfil: VelocimetroMapsON (11)
Evento: Notificación [ Aplicación origen:Maps Título:* Texto:* Subtext:* Messages:* Other Text:* Categ.:* New Only:Apagado ]
Aplicación: Maps
Entrada: VelocimetroMapsON (8)
Abortar Tarea Existente
A1: Probar Pantalla [ Tipo:Orientación Datos: Almacenar Resultado en:%pantalla ]
A2: Si (if) [ %pantalla !~ %escena ]
A3: Si (if) [ %pantalla ~ portrait ]
A4: Establecer variable [ Nombre:%posh A:10 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A5: Establecer variable [ Nombre:%posv A:173 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A6: Else
A7: Establecer variable [ Nombre:%posh A:5 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A8: Establecer variable [ Nombre:%posv A:155 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A9: Fin si (End if)
A10: Establecer variable [ Nombre:%escena A:%pantalla Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A11: [X] Si (if) [ %pantalla ~ %escena ]
A12: Ocultar Escena [ Nombre:VelocimetroMaps Animación:Ninguno Continuar Tarea Tras Error:Encendido ]
A13: Mostrar Escena [ Nombre:VelocimetroMaps Mostrar como:Capa Superpuesta, Bloqueada Posición Horizontal:%posh Posición Vertical:%posv Animación:Sistema Mostrar Botón Salida:Apagado Mostrar sobre bloqueo pantalla:Apagado Continuar tarea inmediatamente:Encendido ]
A14: [X] Fin si (End if)
A15: Fin si (End if)
A16: Esperar [ MS:200 Segundos:0 Minutos:0 Horas:0 Días:0 ]
A17: Ir a acción [ Tipo:Número Acción Número:1 Etiqueta: ]


Perfil: VelocimetroMapsOFF (16)
Evento: Notificación eliminada [ Aplicación origen:Maps Título:* Texto:* Subtext:* Other Text:* Categ.:* ]
Aplicación: Maps
Entrada: VelocimetroMapsOFF (97)
Abortar Tarea Existente
A1: Detener [ Con error:Apagado Tarea:VelocimetroMapsON ]
A2: Destruir Escena [ Nombre:VelocimetroMaps ]

emiegna
27/05/18, 19:10:36
Estos dos perfiles me funcionan perfectamente (creo... En mi linea). Voy siguiendo paso a paso por accion en la ventana de Tasker pulsando abajo en el triangulo "play" con linea vertical y las acciones dentro de %caller1 se ejecutan:

VelocimetroMapsON (8)
Abortar Tarea Existente
A1: Probar Pantalla [ Tipo:Orientación Datos: Almacenar Resultado en:%pantalla ]
A2: Si (if) [ %pantalla !~ %escena ]
A3: Si (if) [ %pantalla ~ portrait ]
A4: Establecer variable [ Nombre:%posh A:10 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A5: Establecer variable [ Nombre:%posv A:173 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A6: Else
A7: Establecer variable [ Nombre:%posh A:5 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A8: Establecer variable [ Nombre:%posv A:155 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A9: Fin si (End if)
A10: Ocultar Escena [ Nombre:VelocimetroMaps Animación:Ninguno Continuar Tarea Tras Error:Encendido ]
A11: Mostrar Escena [ Nombre:VelocimetroMaps Mostrar como:Capa Superpuesta, Bloqueada Posición Horizontal:%posh Posición Vertical:%posv Animación:Sistema Mostrar Botón Salida:Apagado Mostrar sobre bloqueo pantalla:Apagado Continuar tarea inmediatamente:Encendido ]
A12: Establecer variable [ Nombre:%escena A:%pantalla Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A13: Fin si (End if)
A14: Si (if) [ %caller1 ~ *on* ]
A15: Estado del perfil [ Nombre:VelocimetroMapsON Establecer:Apagado ]
A16: Esperar [ MS:200 Segundos:0 Minutos:0 Horas:0 Días:0 ]
A17: Ir a acción [ Tipo:Número Acción Número:1 Etiqueta: ]
A18: Fin si (End if)


VelocimetroMapsOFF (97)
Abortar Tarea Existente
A1: Estado del perfil [ Nombre:VelocimetroMapsON Establecer:Encendido ]
A2: Detener [ Con error:Apagado Tarea:VelocimetroMapsON ]
A3: Destruir Escena [ Nombre:VelocimetroMaps ]

emiegna
27/05/18, 20:39:44
¿Y así?...

VelocimetroMapsON (8)
Abortar Tarea Existente
A1: Probar Pantalla [ Tipo:Orientación Datos: Almacenar Resultado en:%pantalla ]
A2: Si (if) [ %pantalla !~ %escena ]
A3: Si (if) [ %pantalla ~ portrait ]
A4: Establecer variable [ Nombre:%posh A:10 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A5: Establecer variable [ Nombre:%posv A:173 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A6: Else
A7: Establecer variable [ Nombre:%posh A:5 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A8: Establecer variable [ Nombre:%posv A:155 Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A9: Fin si (End if)
A10: Ocultar Escena [ Nombre:VelocimetroMaps Animación:Ninguno Continuar Tarea Tras Error:Encendido ]
A11: Mostrar Escena [ Nombre:VelocimetroMaps Mostrar como:Capa Superpuesta, Bloqueada Posición Horizontal:%posh Posición Vertical:%posv Animación:Sistema Mostrar Botón Salida:Apagado Mostrar sobre bloqueo pantalla:Apagado Continuar tarea inmediatamente:Encendido ]
A12: Establecer variable [ Nombre:%escena A:%pantalla Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A13: Fin si (End if)
A14: Si (if) [ %caller1 ~ *on* ]
A15: Estado del perfil [ Nombre:VelocimetroMapsON Establecer:Apagado ]
A16: Establecer variable [ Nombre:%novel A:- Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A17: Obtener ubicación [ Origen:GPS Cuenta atrás (segundos):10 Continuar tarea inmediatamente:Encendido Mantener Seguimiento:Encendido ]
A18: Si (if) [ %TIMES-%LOCTMS < 20 ]
A19: Establecer variable [ Nombre:%vel A:round(%LOCSPD*3.6) Recurse Variables:Apagado Calcular:Encendido Añadir:Apagado ]
A20: Establecer variable [ Nombre:%Velocidad A:%vel Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ] Si (if) [ %Velocidad ~ %novel ]
A21: Establecer variable [ Nombre:%pas A:ceil(abs(%Velocidad-%vel)*0.75) Recurse Variables:Apagado Calcular:Encendido Añadir:Apagado ]
A22: Establecer variable [ Nombre:%Velocidad A:%Velocidad+%pas Recurse Variables:Apagado Calcular:Encendido Añadir:Apagado ] Si (if) [ %Velocidad < %vel ]
A23: Establecer variable [ Nombre:%Velocidad A:%Velocidad-%pas Recurse Variables:Apagado Calcular:Encendido Añadir:Apagado ] Si (if) [ %Velocidad > %vel ]
A24: Else
A25: Establecer variable [ Nombre:%Velocidad A:%novel Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
A26: Fin si (End if)
A27: Esperar [ MS:200 Segundos:0 Minutos:0 Horas:0 Días:0 ]
A28: Ir a acción [ Tipo:Número Acción Número:1 Etiqueta: ]
A29: Fin si (End if)

WillyWeb
27/05/18, 22:49:53
:oh:

Pues pensaba yo que había dejado claro que en el post #21 había descrito el esqueleto del proyecto y sus partes principales explicando la razón de ser de cada una. Y que también estaba claro lo que va dentro y fuera del bucle principal. Pero no debía estar tan claro. :pensando:

Vamos a ponerlo todo junto y ordenado para ver si se entiende mejor. ;-)

Crea estos perfiles con esos nombres ...

Perfil: VelocimetroMapsON
Evento: Notificación [ Aplicación origen:Maps Título:* Texto:* Subtext:* Messages:* Other Text:* Categ.:* New Only:Apagado ]
Aplicación: Maps
Entrada: VelocimetroMaps

Perfil: VelocimetroMapsOFF
Evento: Notificación eliminada [ Aplicación origen:Maps Título:* Texto:* Subtext:* Other Text:* Categ.:* ]
Aplicación: Maps
Entrada: VelocimetroMaps

Crea esta tarea con ese nombre ...

Tarea: VelocimetroMaps
Abortar Tarea Existente

Si (if) [ %caller1 ~ *on ]

Estado del perfil [ Nombre:VelocimetroMapsON Establecer:Apagado ]
Establecer variable [ Nombre:%novel A:-- Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]

Etiqueta [ INICIO DEL BUCLE ]

Probar Pantalla [ Tipo:Orientación Almacenar Resultado:%pantalla ]
Si (if) [ %pantalla !~ %escena ]
Si (if) [ %pantalla ~ portrait ]
Establecer variable [ Nombre:%posh A:xxx ]
Establecer variable [ Nombre:%posv A:yyy ]
Else
Establecer variable [ Nombre:%posh A:xxx ]
Establecer variable [ Nombre:%posv A:yyy ]
Fin si (End if)
Ocultar Escena [ Nombre:VelocimetroMaps Animación:Ninguno Continuar Tarea Tras Error:Encendido ]
Mostrar Escena [ Nombre:VelocimetroMaps Mostrar como:Capa Superpuesta, Bloqueada Posición Horizontal:%posh Posición Vertical:%posv Animación:Ninguna Continuar tarea inmediatamente:Encendido ]
Establecer variable [ Nombre:%escena A:%pantalla ]
Fin si (End if)

Si (if) [ %TIMES-%LOCTMS < 10 ]
Establecer variable [ Nombre:%vel A:round(%LOCSPD*3.6) Recurse Variables:Apagado Calcular:Encendido Añadir:Apagado ]
Establecer variable [ Nombre:%Velocidad A:%vel Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ] Si (if) [ %Velocidad ~ %novel ]
Establecer variable [ Nombre:%pas A:ceil(abs(%Velocidad-%vel)*0.75) Recurse Variables:Apagado Calcular:Encendido Añadir:Apagado ]
Establecer variable [ Nombre:%Velocidad A:%Velocidad+%pas Recurse Variables:Apagado Calcular:Encendido Añadir:Apagado ] Si (if) [ %Velocidad < %vel ]
Establecer variable [ Nombre:%Velocidad A:%Velocidad-%pas Recurse Variables:Apagado Calcular:Encendido Añadir:Apagado ] Si (if) [ %Velocidad > %vel ]
Else
Establecer variable [ Nombre:%Velocidad A:%novel Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
Fin si (End if)

Esperar [ MS:200 Segundos:0 Minutos:0 Horas:0 Días:0 ]
Ir a acción [Etiqueta: INICIO DEL BUCLE]

Else

Estado del perfil [ Nombre:VelocimetroMapsON Establecer:Encendido ]
Destrir Escena [ Nombre:VelocimetroMaps ]

Fin si (End if)

Crea una escena con nombre "VelocimetroMaps" y coloca esto en la pestaña "Golpe" del recuadro* que recibe los movimientos del dedo ...

Probar Pantalla [ Tipo:Hardware Resolution Datos: Almacenar Resultado en:%res ]
Establece Array [ Matriz de Variables (array):%res Values:%res Separador:x ]
Establecer variable [ Nombre:%movh A:%stroke_len/%res1*200 Calcular:Encendido ] Si (if) [ %stroke_dir ~ *left*/*right* ]
Establecer variable [ Nombre:%movv A:%stroke_len/%res2*200 Calcular:Encendido ] Si (if) [ %stroke_dir ~ *up*/*down* ]
Restar de variable [ Nombre:%posh Valor:%movh ] Si (if) [ %stroke_dir ~ *left* ]
Sumar a variable [ Nombre:%posh Valor:%movh ] Si (if) [ %stroke_dir ~ *right* ]
Restar de variable [ Nombre:%posv Valor:%movv ] Si (if) [ %stroke_dir ~ *up* ]
Sumar a variable [ Nombre:%posv Valor:%movv ] Si (if) [ %stroke_dir ~ *down* ]
Establecer variable [ Nombre:%posh A:0 ] Si (if) [ %posh < 0 ]
Establecer variable [ Nombre:%posh A:200 ] Si (if) [ %posh > 200 ]
Establecer variable [ Nombre:%posv A:0 ] Si (if) [ %posv < 0 ]
Establecer variable [ Nombre:%posv A:200 ] Si (if) [ %posv > 200 ]
Ocultar Escena [ Nombre:%escene_name Animación:Ninguno Continuar Tarea Tras Error:Encendido ]
Mostrar Escena [ Nombre:%escene_name Mostrar como:Capa Superpuesta, Bloqueada Posición Horizontal:%posh Posición Vertical:%posv Animación:Ninguna Continuar tarea inmediatamente:Encendido ]

*No lo he comentado antes, pero ese recuadro (transparente) debería llenar toda la escena y estar sobre el resto de elementos (profundidad con el valor más alto posible).

Y ya te digo que así funciona sin problemas. :ok:

emiegna
27/05/18, 23:59:18
Gracias WillyWeb. :-)

Ya estaba viendo que sobraba el obtener ubicación. Me lo dijiste. ¿Pa qué, si abro Maps? Ya, ya...

Y la segunda parte de la tarea (Else) no se lo que yo hacia, pero no me funcionaba. Por eso opté por dos perfiles con sus tareas.

Bueno, nuevamente el merito es exclusivamente tuyo. Mañana lo pruebo y te digo :ok:

emiegna
28/05/18, 00:23:03
Bueno, ya lo he probado. Obviamente funciona perfectamente.

Muchas gracias a ambos (WillyWeb y Caravantes) por todo. Por enseñarme y por vuestra paciencia. Procuraré embarcarme desde ahora en proyectos mas sencillos hasta que vayan mejorando mis conocimientos.

:ok: