Ver Mensaje Individual
  #2  
Viejo 15/04/13, 02:18:49
Array

[xs_avatar]
ATaskREADOS ATaskREADOS no está en línea
Miembro del foro
 
Fecha de registro: ene 2013
Mensajes: 180
Tu operador: Otra

Tasker para principiantes. Lección 3. Escenas 2ª PARTE

Por razones técnicas, este artículo comienza en otro mensaje: http://www.htcmania.com/showpost.php?p=8335103

save-tap[1].jpg

El botón Guardar ("Save") es donde sucede la magia realmente. Cuando se hace clic, se anexa el archivo de texto correspondiente con el valor de %todotitle (más un cambio de línea) en función del valor de %todotag. En otras palabras, todo lo que escribió en el campo de entrada de texto se añade al archivo de texto para la lista que haya seleccionado mediante el boton guardar. Se filtra esto usando Si(If) en las acciones de escritura de archivos.

La lección importante aquí es cómo el uso de un botón Guardar independiente significa que puedo poner la acción de Escribir archivo fuera del elemento Editar texto y su rápida sucesión de textos modificados. Si yo hubiera puesto Escribir archivo en la pestaña de Texto modificado en el elemento Editar texto, habría escrito en el archivo cada vez que se pulsa una nueva letra. No sólo eso podría causar problemas para el sistema, si no que no se podría haber utilizado la opción de anexar para añadir el texto al final del archivo, así como también repetiría todas las letras precedentes, tan pronto como escribiera otras nuevas. Escribiendo "manzana" en el campo se traduciría en un archivo de la siguiente manera:
mmamanmanzmanzamanzana

Debo resaltar que lo difícil con las escenas es hacer que todo funcione en conjunto, y esto es sólo otro ejemplo.

Después de que se ha guardado el texto en un archivo, se destruye la escena, y se ejecuta la tarea que activa la escena de nuevo (el que se describe al principio de esta sección). La función de esto es para actualizar la escena completa de la manera más sencilla posible, dejando libre el campo de entrada de texto y actualizar los elementos de texto, de manera que se muestren los nuevos contenidos de los archivos de texto.

Aquí es donde la demora de 500 milisegundos entra en juego. Tuve problemas con la escena, no cargaba correctamente al hacerlo sin espera, por lo que añadí esa demora. A veces hay que dar a las tareas un poco de respiro, empleando las acciones de Espera.

destroy-scene-long-tap[1].jpg

El botón de guardar también tiene un segundo uso, dejándolo pulsado en lugar de hacer un clic corto. Esto se hace mediante la adición de acciones a la pestaña de Clic-largo, en este caso una simple acción de Destruir escena. Mientras que hacer clic en el botón hará que se recargue la escena, también necesitaba un botón que realmente cerrara la escena. En lugar de añadir un botón por separado, simplemente añadí un segundo uso para el botón Guardar.

Los elementos de Texto:

todo-list-elements[1].jpg

La parte inferior de la escena se compone de seis elementos de texto: campos que lista el contenido de las tres listas de tareas pendientes y las etiquetas correspondientes en la parte superior. Las etiquetas son estáticas, pero las listas son dinámicas.

En primer lugar, cada lista tiene una variable como contenido del campo de texto. Son las variables que se crean por la tarea inicial que crea la escena, y guardan el contenido de cada una de las listas de tareas pendientes. En otras palabras, cada uno de los tres elementos de texto contienen el texto almacenado en los archivos de texto. Cada vez que la primera tarea se ejecuta mediante la destrucción de la escena y de ejecutar la tarea de nuevo inicio, estas variables se actualizan.
La acción Clic para cada elemento de texto en la parte superior abre el archivo de texto correspondiente. Estos se abren en cualquier aplicación establecida para la apertura de los archivos de texto, y esto es una forma muy rápida y sencilla de añadir una forma de editar las listas de tareas pendientes. Muy rara vez he tenido que hacerlo, ya que normalmente borro la lista entera de una vez, pero es bueno tener la opción.

menu[1].jpg

La tarea Clic-largo para de cada elemento hace tres cosas. En primer lugar, se muestra una nueva escena de diálogo, la forma más rápida y sucia, mediante la acción Menú a la que antes me he referido brevemente. La acción Menú técnicamente crea una escena, que uno puede modificar, pero se configura a través de opciones propias de la acción, no en el editor de escenas. Es más rápido cuando sólo tiene que crear una escena de diálogo rápido, como aquí. Esta escena-Menú me pregunta si deseo borrar la lista de tareas correspondiente.
Hay dos opciones en esta escena Menú, y No. No destruye la escena Menú y, a continuación, continúa la tarea inicial del Clic largo: cierra la escena de Lista de tareas, y se reinicia/refresca utilizando el mismo método que con el botón Guardar. La opción escribe un espacio en blanco en el archivo de texto de la correspondiente lista, con la opción Añadir sin marcar. Si estuviera marcada esa opción Añadir (en la acción Escribir Archivo) ocurriría que el nuevo texto se añada al final del archivo; si no esta marcada se sobrescribe el archivo sustituyendo todo lo que contuviera. En el botón Guardar, en la acción Escribir Archivo está marcada esa opción Añadir , pero en éste no lo está, dado que se supone que debe borrar la lista.

Hay un par de razones por las que escribo un espacio vacío para el archivo de texto en lugar de escribir nada o eliminarlo. Si hubiera usado Eliminar archivos para eliminar el archivo, a continuación, Tasker me habría dado un error al intentar leer el archivo en una variable como parte de la iniciación de la escena. Si yo hubiera escrito nada en el archivo, a continuación, las variables creadas por Tasker al iniciar la escena hubiera quedado en blanco. Como se explica en el artículo anterior, esto provoca que Tasker muestre literalmente el nombre de la variable en la que se utiliza la variable. En otras palabras, una lista vacía, no se mostrará como vacío en la escena, en cambio, se mostrará el nombre de la variable, como %Todoshopping.

Después de hacer clic en , la escena “Lista de Tareas” será destruida, a continuación, la vuelve a crear para actualizarla.

La parte no-escena de esta lista:

todo-morning[1].jpg

Como sé que es un hecho que hay gente por ahí que trataron de hacer un sistema de lista de tareas como la mía y no lo consiguieron, voy también a mencionar brevemente la parte de este sistema que no está relacionada con la escena -por completar esta explicación.

Lo que hace esta escena es darle una interfaz para la creación y gestión de la lista de tareas, pero el otro componente del rompecabezas es una forma de Tasker para verificar y actuar con base en ella.


La imagen de arriba muestra mi tarea “Lista de por la mañana”. El propósito de esta tarea es comprobar la lista de tareas por la mañana y notificarme si hay elementos contenidos en ella. Empieza por leer el archivo de texto que contiene la lista en una variable. Si la lista está vacía, la variable contendrá sólo un espacio (como he explicado antes). Como tal, puede utilizar una instrucción If %Todomorning coincide con ++ para comprobar si hay algún elemento en el mismo. ++ Significa "al menos dos caracteres", lo cual es cierto cuando hay elementos reales de la lista, pero no es cierto si sólo hay un espacio.

La acción 4 en la lista anterior crea una notificación con %Todomorning como texto, pero está limitado por esta condición Si(If). Como resultado, sólo se crea la notificación cuando hay algún elemento en la lista.

Las acciones 2 y 3 no son muy relevantes, pero las voy a explicar en aras a no dejar ninguna pregunta. Esta tarea “Lista de por la mañana” se ejecuta como parte de una tarea mucho más grande que se ejecuta cuando me levanto por la mañana, y quiero que el mensaje hablado que me sale cuando me levanto mencione si tengo artículos en mi lista de tareas. Hago esto estableciendo la variable %Todomorningnot a "Hay artículos en su lista de tareas" usando la misma condición de la acción 4 anterior. %Todomorningnot se inserta en la acción Decir en la tarea principal de la mañana. La acción 2 se asegura de que esta variable no contiene nada si la condición Si(If) no se cumple. El resultado final es que si la lista no contiene ningún elemento, una notificación será creada, y mi mensaje de la mañana me informará de esto. Si la lista está vacía, no habrá ninguna notificación y no habrá mensaje.

Ejemplo 3: Escena con ventana virtual webcam:

webcam-trigger[1].jpg

Mi ventana virtual ya fue tema de un artículo (N.T: enlace al artículo original referenciado, en inglés), pero no entré en muchos detalles.

¿Cómo se activa?

Esta escena también es desencadenada por una tarea asociada a uno de los botones en el ejemplo 1. La propia escena contiene imágenes que han de ser descargados de la web, y debido a esto, la acción de Mostrar escena está al final de la tarea. Las tres acciones que le preceden son Obtener HTTP GET, que se utilizan para descargar las imágenes; las imágenes se guardan en una ruta específica, por lo que cada vez que se ejecuta la tarea sobrescribe las imágenes existentes. Por eso es imprescindible que la acción Mostrar escena se ejecute después; en otro caso la escena cargará las imágenes antiguas. La opción Mostrar-Como es, esta vez, Superpuesta Bloqueada. En este caso, en realidad no importa.

La escena:

webcam-scene[1].jpg

La escena es tan simple como parece. Cuenta con tres elementos de imagen, cada uno de los cuales utiliza una de las imágenes descargadas de su fuente. Las imágenes han sido movidas y redimensionadas en el editor, y a pesar de que carga las imágenes recién descargadas cada vez que se muestra, se mantiene el mismo diseño.

Cada imagen también tiene como acción al hacer clic el Destruir-Escena. Eso significa que al tocar cualquiera de las imágenes hará que la escena desaparezca.
Esta es una escena muy simple desde el punto de vista técnico, pero la uso mucho. También se muestra el uso de imágenes dinámicas, que tienen muchas aplicaciones. Usted podría, por ejemplo, crear una escena que -al hacer clic en un botón- muestre nuevos cómics aparecidos hoy en la web.

Ejemplos 1-3 en la práctica:



Los ejemplos 2 y 3 se activan con botones en el ejemplo 1, por lo que decidí crear un solo vídeo para mostrar cómo funciona todo esto en la práctica. Hay muchas cosas que van a hacer que todo en una escena funcione como debe, sobre todo cuando hay muchas cosas que tienen que trabajar juntas. Como se puede ver en el vídeo, sin embargo, todo es muy simple cuando usted realmente sabe cómo quiere llegar a utilizarlo.

Ejemplo 4: notificación de Gmail:

Los tres primeros ejemplos son todos usos bastante estándar para las escenas. Este no lo es. Todo comenzó con el deseo de añadir una notificación más visible para los correos electrónicos entrantes, de forma similar a los LEDs de notificación en algunos dispositivos. He experimentado con el uso del LED de la cámara, y funcionaba bien, pero no era tan elegante ... como podría ser. Mi Galaxy S II tiene una pantalla AMOLED, y una de las ventajas (N.T: enlace al artículo original referenciado, en inglés), de una pantalla así es que el color negro se crea apagando los pixeles. Los píxeles negros son por lo tanto sólo la pantalla apagada. Se me ocurrió la idea de tener un logotipo Gmail que se muestra en la pantalla, de tal manera que parezca como si sólo la parte de la pantalla con el logo se encendiera (que es en realidad lo que realmente sucede, debido a la forma en que funciona la tecnología AMOLED). El vídeo a continuación es el resultado de esta idea, y toda la magia que se hace con las escenas en Tasker.




¿Cómo se activa?

gmail-not-tr[1].jpg

Parte de lo que hace que este ejemplo sea tan especial es cómo se activa (o tal vez "cómo se controla" es una expresión más adecuada en esta situación). En primer lugar, esta escena se activa automáticamente mediante un perfil y un contexto. Cuatro contextos, para ser exactos. El principal es un contexto de evento para cualquier notificación de la aplicación Gmail. En otras palabras, este contexto se activa si Gmail recibe una notificación, que es sólo cuando se recibe un correo electrónico en mi caso.

Este evento de notificación se ve filtrado mediante tres contextos de estado. La variable %Sleepmode no puede ser igual a "on", el perfil del hogar tiene que estar activo, y la pantalla tiene que estar apagada. El primero de estos es para evitar que el perfil se active cuando duermo. La segunda es para asegurarse de que sólo se ejecuta cuando estoy en casa (tengo un sistema diferente notificación de Gmail para otros sitios). El tercero es para asegurarse de que sólo se ejecuta cuando la pantalla está apagada, para que no interfiera conmigo cuando estoy utilizando el dispositivo.

Ahora veamos la tarea que crea la escena. La primera acción muestra la escena Notificación Gmail, que es el logotipo de Gmail en un fondo negro. El tipo de pantalla es Superpuesta bloqueada, a pantalla completa. La segunda acción es otra Mostrar-escena, esta vez para un escenario completamente negro, con el tipo de pantalla de Actividad a Pantalla completa, y sin título.

¿Por qué dos escenas? En mis pruebas, me di cuenta de que (en mi dispositivo y ROM, esto podría muy bien ser dependiente del dispositivo) el tipo de pantalla Superpuesta no era capaz de girar en la pantalla de mi dispositivo. El tipo de pantalla de Actividad sí lo hace, pero su definición de pantalla completa no incluye la barra de estado, dejándola visible. Mediante el uso de dos escenas - uno de cada tipo - me las arreglé para conseguir un escenario donde la escena se enciende la pantalla, y que en realidad cubre toda la pantalla con un recuadro negro, es decir, los píxeles se quedarán apagados en una pantalla AMOLED.

Después de crear este sistema, he rooteado mi dispositivo, y ahora podría usar el plugin Secure Settings para despertar el dispositivo. Sin embargo, yo no tiendo a arreglar algo que no está roto, y el método descrito (sin root) es el mejor ejemplo de cómo se pueden utilizar las escenas de manera creativa.

La acción 3, es una acción Espera que decide cuánto tiempo la pantalla permanecerá encendida (como la acción 5 en el bloqueo del sistema). En el logotipo de Gmail se puede hacer clic y eso te llevará a la aplicación de Gmail, por lo que la acción 4 está ahí para evitar que el resto de la tarea se ejecute (y al hacerlo, apague la pantalla) si en efecto hace clic en el logo. Más adelante veremos la variable que la acción de Detener usa como condición Si(If) cuando se hace clic en el logo.

La acción 6 es una espera de nuevo, esta vez para asegurarse de que la animación de la pantalla de bloqueo tiene tiempo para terminar antes de que las dos escenas se destruyen con las acciones 7 y 8.
Cuando todo esto trabaja en conjunto, se obtiene el resultado en el vídeo de arriba.

La escena:

gmail-scenes[1].jpg

Las dos escenas aquí no son muy interesantes en sí mismas. La escena Notificación Gmail tiene el logo de Gmail, y eso es todo. Sin embargo, hay bastantes pocas acciones vinculadas a la tarea cuando hago Clic para la imagen. En primer lugar, se establece la variable %Gmailactive, que a su vez controla la acción de parada que he mencionado anteriormente. Entonces destruye las dos escenas utilizadas para crear la notificación. A continuación, se carga la app de Gmail, lo que me permite leer el correo electrónico que en entró. Finalmente, espera 6 segundos, y luego borra la variable %Gmailactive, reiniciándola para la próxima vez.

Como he dicho, este es un uso bastante peculiar de escenas, pero también es una de mis configuraciones favoritas en Tasker. Cuando estoy en casa, mi teléfono está normalmente colocado en un dock en mi escritorio, con la pantalla apuntando hacia mí, así que tener una notificación visible es estupendo. La posibilidad de limitarla a cuando estoy en casa y cuando no estoy usando el teléfono hace que sea mucho más útil. Para que conste, cuando no estoy en casa, en lugar de esta configuración, la notificación cambia a tres vibraciones de un segundo.

Ejemplo 5: Bloqueo de pantalla con escenas



Los ejemplos anteriores han sido de mi propia configuración de Tasker, con escenas y sistemas que conozco bien. Para éste último que voy a cumplir una petición de un lector de un artículo anterior (N.T: enlace al artículo original referenciado, en inglés) creando una pantalla de bloqueo con el uso de escenas.

¿Cómo se activa?


Ya que estamos hablando de una pantalla de bloqueo, lo lógico sería hacer que se active al encender la pantalla, con el contexto de evento Pantalla encendida. El problema con esto es que, ya que toma unos pocos milisegundos para mostrar la escena, usted consigue este efecto de retraso cuando se utiliza ese contexto - por lo menos en mi antiguo Galaxy S II.


La alternativa es dispararlo con el contexto Pantalla apagada. Esto puede parecer al revés, pero la ventaja es que la escena está preparada para mostrarse al encender la pantalla de nuevo, por lo que se visualiza con mayor rapidez. Este método sin embargo también tienen sus desventajas.

En primer lugar, todos los elementos de la escena se habrán creado cuando la pantalla se apaga, y podría luego estar desfasados cuando se enciende de nuevo. Como veremos más adelante, he añadido un elemento de texto simple con %TIME como el texto de la pantalla de mi prueba de bloqueo, que resulta en un "reloj estático" que muestra la hora en que la escena fue creada (pero no cambia por si misma). Mostrar la hora es útil para comprobar rápidamente la hora encendiendo la pantalla, pero eso solo vale si la escena se crea al mismo tiempo, no si se muestra la hora de cuando la pantalla se apagó. Sin embargo, es posible arreglarlo a medias si agregamos un perfil que se dispara con el contexto Pantalla Encendida, y lo utilizamos para actualizar los elementos relativos al tiempo, mediante el uso de diversas acciones en la categoría de acciones de la escena. A continuación, obtendrás una escena que aparece rápidamente, pero con los datos erróneos, y que se actualiza después de una fracción de segundo.

El segundo problema con el uso de
Pantalla apagada es que usted puede tener una pantalla de bloqueo de seguridad (por ejemplo, pantalla de patrón de desbloqueo) por debajo de esta pantalla de bloqueo creada en Tasker; en tal caso, es necesario utilizar la visualización de tipo diálogo para hacer que pantalla de bloqueo de Tasker esté en la parte superior, si eso es lo que quiere, por supuesto. Desafortunadamente, cualquier escena de diálogo también se convierte de nuevo en la pantalla, así que cuando se bloquea la pantalla, se creará una escena que convierte la pantalla de nuevo. (¿? "Unfortunately, any dialog scene also turns the screen back on, so when you lock the screen, it will create a scene that turns the screen back on.") Usted también puede medio solucionar este problema, añadiendo en la tarea una acción de bloqueo del sistema después de la acción Mostrar-escena. Y a continuación, terminar con un bloqueo de pantalla que parpadea brevemente cuando se enciende la pantalla.

Así que, en resumen, ambos métodos tienen problemas. La fracción de segundo que tienes que esperar cuando se utiliza la pantalla del contexto no es una opción mala, salvo que seas muy exigente.

Creación de un escenario de bloqueo de pantalla.

Ahora es donde comienza la diversión! Hay bastantes cosas que usted puede hacer para crear una pantalla de bloqueo en Tasker, y el resultado final puede ser bastante impresionante.
Empecé poniendo un control deslizante, para moverel deslizador (o el pulgar como Tasker lo llama), y llevarlo de 0-100. Luego me fui a la pestaña de Valor seleccionado y añadí una acción Destruir-escena con la condición Si(If) %new_val es mayor que (>) 90. ¿Por qué? Para desbloquear deslizando! Al mover el deslizador más a la derecha del 90%, se destruye la escena y la pantalla se "desbloquea".

A continuación, agregué el "reloj." Es un elemento de texto simple con %TIME como texto, como he explicado anteriormente. Con un tamaño de texto de gran tamaño hace que se vea como un widget. Usted también tiene %DATE (fecha), %BATT (batería), y un montón de otras variables integradas para ayudar a poblar su escena pantalla de bloqueo. Sólo recuerde que a más dinámico el contenido que desea añadir, más se tiene que actualizar utilizando un segundo perfil si usted elige la opción Pantall-apagada para activar la escena.

A continuación he añadido un logo de Gmail mediante la inserción de un elemento de imagen y el uso del logo aplicación Gmail. He añadido una acción para abrir la aplicación Gmail como una acción de Clic, así como una acción de Destruir-escena para cerrar la pantalla de bloqueo antes de hacerlo. Ya que no voy a utilizar este sistema de bloqueo de pantalla yo mismo, añado texto estático para mostrar correos electrónicos nuevos al lado del icono. Añadir un contador de correo electrónico real o contador de SMS no es un problema (N.T: enlace al artículo original referenciado, en inglés). Por último, he añadido una imagen estática de mi perro, sólo para llenar la pantalla. Si yo fuera a utilizar realmente esto, sin embargo, habría utilizado el resto del espacio para otra cosa, como la información del propietario y otras preferencias personales.

Una vez que la escena está preparada, todo lo que tienes que hacer es vincularla a una tarea que se ejecute con tu contexto preferido.

Pantallas de bloqueo dependiendo de la situación:

Si bien no voy a sustituir mi pantalla de bloqueo de WidgetLocker por este sistema, hay una ventaja de este sistema de escena que me hace estar muy tentado de usarla: Tener pantallas de bloqueo dependiendo de la situación. Usted puede crear fácilmente múltiples escenas para diferentes ocasiones, dependiendo de que esté en casa, en las afueras, en la escuela, el trabajo, y así sucesivamente. Mucha gente, yo incluido, tiene perfiles para distintos lugares y situaciones, y utilizarlos para controlar qué escena se muestra es tan fácil como tener múltiples acciones de Mostrar escena con condiciones Si(If).

No puedo entender por qué WidgetLocker no tiene perfiles, pero
no hay muchas esperanzas al respecto, por lo que he visto de la respuesta del desarrollador a comentarios de los usuarios. A pesar de ello, sin embargo, el uso de escenas como las pantallas de bloqueo no se ha llegado todavía, si usted me pregunta, pero está ridículamente cerca de algo que no fue diseñado para ello.

Para terminar, esta ha sido una parte muy larga de la guía (N.T: que me lo digan a mi!!!), con un mayor énfasis en ejemplos que en la teoría. Eso es simplemente porque la característica de escena tiene tanto potencial que creo que es más fácil entender cómo funciona viendo ejemplos de la vida real. Como te habrás dado cuenta, sin embargo, hay un montón de cosas de menor importancia aquí y allá, que hace cada escena única, desde la obligación de pre-carga de datos antes de crear una escena a usar varias escenas para combinar sus ventajas.

La siguiente parte de la guía se referirá a los datos de proceso con variables, lo cual es algo que abre toda una gama de nuevos usos para Tasker.

--
Autor: Andreas Ødegård . 02 de septiembre 2012
Artículo originalmente publicado en Pocketables: http://www.pocketables.com/2012/09/b...-3-scenes.html

----------------------------------

Publicado: Mlesir (traducción y composición) y Carvantes (correciones posteriores).
__________________
ATaskREADOS somos el equipo que promueve el foro y el recopilatorio de Tasker http://www.htcmania.com/forumdisplay.php?f=969
Para cualquier asunto relacionado con el foro, puedes escribirnos a [email protected]

Última edición por ATaskREADOS Día 23/04/13 a las 21:31:19.
Responder Con Cita
Los siguientes 5 usuarios han agradecido a ATaskREADOS su comentario:
[ Mostrar/Ocultar listado de agradecimientos ]