Ver la Versión Completa : Ejercicios de verano (contexto para detectar una foto nueva)
WillyWeb
01/07/18, 11:36:24
Esta vez ha sido un Taskero de este foro el que me ha hecho la pregunta ...
¿Existe un contexto que active un perfil al sacar una foto?
El tema no es nuevo en este foro ... https://www.htcmania.com/showthread.php?t=727091
Entonces ya se apuntaron ideas muy interesantes, pero el "problema" quedó sin solucionar.
¿Alguna idea nueva? :pensando:
Caravantes
01/07/18, 12:56:01
Sigo sin encontrar ningún contexto directo que se pueda aprovechar para ésto, y me parece una carencia (fallo) importante de Tasker.
Antaño ya comenté una posibilidad:
Usa la app de la cámara como contexto para activar un perfil. La tarea de entrada puede obtener un "listado" de los archivos que hay en la carpeta de fotos mediante la acción Listar archivos, y meter ese listado en una variable. La tarea de salida hace lo mismo y mete el nuevo listado en otra variable. Si ambas variables son distintas, pones la variable 'tomafoto' a 1.
Ahora se me ocurre otra parecida, pero que no depende de la app de la cámara. Por lo que yo he visto, las fotos son creadas con el nombre de archivo que corresponde a la fecha y la hora: aaaammdd_hhmmss. Sabiendo eso, una acción LISTAR ARCHIVOS puede buscar archivos coincidentes con el patrón del momento actual para saber si hay archivos recientes. Por ejemplo, si hoy es uno de julio y son las 12:23:00 puedo usar el patrón 20180701_12* para obtener el listado de los archivos/fotos que se hayan podido generar en los últimos (23) minutos. Una tarea de este tipo también puede asociarse a un perfil que se active cada cierto tiempo para comprobar periódicamente las fotos del último periodo; la comprobación se podrían hacer con la frecuencia deseada: cada 10 segundos, cada minuto, cada 10 minutos, cada hora, cada día, etc.
Por último, se pueden combinar ambas estrategias. Por ejemplo, el segundo perfil puede estar activo solo mientras la app de la cámara está abierta, y puede estar chequeando cada 10 segundos (o cada segundo) en busca de fotos nuevas, para procesarlas de inmediato, sin esperar a que se cierre la app de la cámara.
Yo diría que estos planteamientos no son nada elegantes, y además derrochan recursos, pero pueden servir como apaño en algunos casos. La eficiencia dependerá mucho de ciertos detalles como el número de fotos diarias (de media), la cantidad de veces que se abre la app de la cámara y se cierra sin haber hecho ninguna foto, etc.
Sigo sin resolver el problema principal: un contexto que se pueda asociar directamente al disparo de la foto. Quizá algún compañero encuentre el truco, u otras estrategias laterales que sean tan validas como las que yo ofrezco.
SmartPhoneLover
01/07/18, 12:58:28
Pues la primer idea que me viene a la cabeza, es monitorizar la carpeta que tengamos destinada a la cámara.
Luego, para detectar si lo que se tomó fue una foto, o video, simplemente agrega una acción de listar archivos según fecha de creación/modificación y obtén el último. A continuación podrás incluir las acciones que desees dentro de un condicional IF para extensiones de fotos.
Caravantes
01/07/18, 13:01:08
Añado dos detalles que olvidé en mi mensaje anterior:
A) En los smartphones que yo he utilizado, las capturas de pantalla van a otro directorio/carpeta distinta. O sea que si hay que vigilar también las nuevas capturas de pantalla, hay que revisar las dos carpetas.
B) En la carpeta de las fotos también suelen aparecer los vídeos grabados con la cámara. Si solo se quieren chequear las fotos, en la acción LISTA ARCHIVOS habrá que filtrar por la extensión, normalmente jpg.
SmartPhoneLover
01/07/18, 13:24:32
Mi idea...
Profile: Nuevo Archivo Cámara
Event: File Modified [ File:DCIM/Camera/ ]
Enter: HTCMania - x (180)
A1: List Files [ Dir:DCIM/Camera Match:*.jpg Include Hidden Files:Off Use Root:Off Sort Select:Modification Date Variable:%temp1 Continue Task After Error:On ]
A2: Flash [ Text:%temp1(<) Long:On ]
Serviría como base, según lo que se desee hacer.
WillyWeb
01/07/18, 14:00:45
Mi idea...
Antes de proponer el ejercicio ya había probado eso y, en mi caso, el evento de "Archivo modificado" ocasiona múltiples disparos del perfil. Uno Al abrir la app y un par con cada foto. El que me funciona perfectamente (una foto = un evento) es "Atributos de archivo modificados" poniendo como carpeta a vigilar "/sdcard/DCIM/Camera/".
WillyWeb
01/07/18, 14:02:56
A) En los smartphones que yo he utilizado, las capturas de pantalla van a otro directorio/carpeta distinta. O sea que si hay que vigilar también las nuevas capturas de pantalla, hay que revisar las dos carpetas.
Ese es otro problema ... Un contexto que detecte una captura de pantalla.
B) En la carpeta de las fotos también suelen aparecer los vídeos grabados con la cámara. Si solo se quieren chequear las fotos, en la acción LISTA ARCHIVOS habrá que filtrar por la extensión, normalmente jpg.
Interesante. No había pensado en los vídeos. :pensando:
WillyWeb
01/07/18, 14:04:17
A1: List Files [ Dir:DCIM/Camera Match:*.jpg Include Hidden Files:Off Use Root:Off Sort Select:Modification Date Variable:%temp1 Continue Task After Error:On ]
A2: Flash [ Text:%temp1(<) Long:On ]
Ahora que me fijo bien, para hacer eso tienes la variable %FOTO.
EDITO
Pero si también pensamos en los vídeos que ha comentado Caravantes la variable %FOTO ya no nos vale y tu planteamiento sí.
Caravantes
01/07/18, 14:14:03
Traduzco a cristiano el perfil de Smart:
Perfil: Nueva foto (197)
Evento: Archivo modificado [ Archivo:/storage/3831-6531/DCIM/Camera/ ]
Entrada: Nueva foto (198)
A1: Bip [ Frecuencia:8000 Duración:1000 Amplitud:50 Stream:3 ]
A2: Listar archivos [ Directorio:/storage/3831-6531/DCIM/Camera Coincidir:*.jpg Incluir Archivos Ocultos:Apagado Usar Root:Apagado Ordenar por:Modification Date Variable:%fotos Continuar Tarea Tras Error:Encendido ]
A3: Flash [ Texto:%fotos Largo:Apagado ]
No me lo esperaba, pero el contexto funciona, se activa después de hacer cada foto.
Prueba superada. SmartPhoneLover :campeon:
He añadido un BIP precisamente para detectar fácilmente cuándo se ejecuta la tarea, y es intantáneo.
Aclaro que mi smartphone está configurado para guardar las fotos en la tarjeta SD, y es por eso que aparece un almacenamiento raro (/storage/3831-6531/DCIM/Camera/)
Lo triste es que en el flash no me sale la lista de archivos, solo sale "%fotos" (el nombre de la variable que debería contener la lista de archivos). Seguro que es un fallo tonto que se puede arreglar.
Caravantes
01/07/18, 14:20:27
Antes de proponer el ejercicio ya había probado eso y, en mi caso, el evento de "Archivo modificado" ocasiona múltiples disparos del perfil. Uno Al abrir la app y un par con cada foto.
Pues a mí me funciona bien. El perfil no se inmuta al abrir la cámara, y se ejecuta una vez tras disparar la foto. El efecto colateral que he encontrado es que este perfil también se dispara si voy a la galería y elimino alguna foto. Seguimos investigando.
WillyWeb
01/07/18, 14:23:42
Lo triste es que en el flash no me sale la lista de archivos, solo sale "%fotos" (el nombre de la variable que debería contener la lista de archivos). Seguro que es un fallo tonto que se puede arreglar.
Esa variable es un array. Si pones ... %fotos(<) ... verás el último elemento del array (el archivo más reciente).
WillyWeb
01/07/18, 14:26:11
Pues a mí me funciona bien. El perfil no se inmuta al abrir la cámara, y se ejecuta una vez tras disparar la foto.
Curioso funcionamiento el de los eventos de archivo. Al Taskero que me ha hecho la pregunta no le funcionan y en mi caso el de "archivo modificado" salta varias veces. :oh:
El efecto colateral que he encontrado es que este perfil también se dispara si voy a la galería y elimino alguna foto. Seguimos investigando.
Eso lo puedes arreglar añadiendo tu app de cámara al perfil.
SmartPhoneLover
01/07/18, 15:19:49
Ese es otro problema ... Un contexto que detecte una captura de pantalla.
Se me ocurre usar el mismo sistema para detectar cambios en x carpeta.
Notas:
- No hay intent en Android que lo detecte.
- Referido a lo anterior, ya se ha agregado la propuesta a la web trace para que Joao añada esa funcionalidad, mediante el método FileObserver.
SmartPhoneLover
01/07/18, 15:23:51
Pues a mí me funciona bien. El perfil no se inmuta al abrir la cámara, y se ejecuta una vez tras disparar la foto. El efecto colateral que he encontrado es que este perfil también se dispara si voy a la galería y elimino alguna foto. Seguimos investigando.
Claro que si. El perfil detecta cambios, pero no diferencia en qué tipi de cambio. Habrá que modificarlo para que sepa si se ha eliminado o añadido algún elemento.
WillyWeb
01/07/18, 15:25:32
Se me ocurre usar el mismo sistema para detectar cambios en x carpeta..
Lo he probado antes de responder a Caravantes y confirmo que el mismo evento me detecta perfectamente las capturas de pantalla.
SmartPhoneLover
01/07/18, 15:30:14
Añado dos detalles que olvidé en mi mensaje anterior:
A) En los smartphones que yo he utilizado, las capturas de pantalla van a otro directorio/carpeta distinta. O sea que si hay que vigilar también las nuevas capturas de pantalla, hay que revisar las dos carpetas.
Podrías usar AutoNotification para estar al tanto de la notificación generada. Tal como hice en mi proyecto 'Screenshot Plus' para sustituir la notificación original de SystemUI por una personalizada con opciones (botones) extras.
Caravantes
01/07/18, 19:29:05
Recapitulando:
Yo no esperaba que el evento ARCHIVO MODIFICADO fuese a detectar un archivo nuevo, porque los conceptos de MODIFICADO y NUEVO son sustancialmente distintos. De hecho, según dice Willy (#12) no le funciona al Taskero que le hizo la pregunta, y al propio Willy le funciona de forma anómala. La alternativa es ATRIBUTOS DE ARCHIVO MODIFICADOS, pero por similares razones puede que tampoco sea totalmente fiable. Creo que a mí me funcionan bien los dos, pero puede ser de milagrito / por los pelos / de casualidad, y no sabemos en qué condiciones (hard/soft) estos contextos funcionan o dejan de funcionar.
Efectivamente, añadiendo un segundo contexto de APP - Cámara, se soluciona el problema de que el perfil se dispare al borrar (o modificar) fotos.
La variable %FOTO a mí me funciona mal: no identifica el último archivo (la última foto) sino otro anterior, de hace varios días. Descartado.
Para obtener la identificación de la última foto hay que jugar con la ordenación en LISTAR ARCHIVOS, y luego elegir el primer o último elemento del array. A mi me funciona bien el esquema siguiente.
Perfil: Foto nueva (197)
Evento: Archivo modificado [ Archivo:/storage/3831-6531/DCIM/Camera/ ]
Aplicación: Cámara
Entrada: Foto Nueva (198)
A1: Bip [ Frecuencia:8000 Duración:1000 Amplitud:50 Stream:3 ]
A2: Listar archivos [ Directorio:/storage/3831-6531/DCIM/Camera Coincidir: Incluir Archivos Ocultos:Apagado Usar Root:Apagado Ordenar por:Modification Date Variable:%fotos Continuar Tarea Tras Error:Encendido ]
A3: Establecer variable [ Nombre:%FotoNueva A:%fotos(<) Recurse Variables:Apagado Calcular:Apagado Añadir:Apagado ]
En la acción LISTAR ARCHIVOS, recomiendo no filtrar por *.JPG para que coja igualmente un posible archivo de vídeo cuya grabación haya disparado el perfil. Luego, la tarea puede utilizar la extensión para dar un tratamiento distinto a las fotos y a los vídeos (tal vez con los vídeos no haya que hacer nada). Si se filtra por *.JPG probablemente ocurra que al grabar un vídeo la tarea vuelva a procesar repetidamente el fichero de la foto que se hubiera tomado antes.
Caravantes
01/07/18, 19:42:19
He intentado hacer un segundo perfil para que, al cerrar la cámara, Tasker me muestre la última foto tomada.
No encuentro la acción para mostrar foto, ni en el apartado Multimedia ni tampoco en el de Imagen. Ya sé que se podría hacer con una escena, pero buscaba una opción más sencilla e inmediata. Para los archivos de audio sí que hay una acción directa. ¿Estoy muy despistado o no hay una acción simple para mostrar una imagen por pantalla?
SmartPhoneLover
01/07/18, 20:00:43
He intentado hacer un segundo perfil para que, al cerrar la cámara, Tasker me muestre la última foto tomada.
No encuentro la acción para mostrar foto, ni en el apartado Multimedia ni tampoco en el de Imagen. Ya sé que se podría hacer con una escena, pero buscaba una opción más sencilla e inmediata. Para los archivos de audio sí que hay una acción directa. ¿Estoy muy despistado o no hay una acción simple para mostrar una imagen por pantalla?
+> File > Open File (MIME = image/*)
Otra forma seria, por JF:
A1: Variable Set [ Name:%temp To:RUTA_ARCHIVO Recurse Variables:Off Do Maths:Off Append:Off ]
A2: Java Function [ Return:temp Class Or Object:File Function:new
{File} (String) Param:%temp Param: Param: Param: Param: Param: Param: ]
A3: Java Function [ Return:%temp Class Or Object:Uri Function:fromFile
{Uri} (File) Param:temp Param: Param: Param: Param: Param: Param: ]
A4: Send Intent [ Action:android.intent.action.VIEW Cat:Default Mime Type:image/* Data:%temp Extra: Extra: Extra: Package: Class: Target:Activity ]Bueno... JF es solo para crear la ruta URI, pero como URI tiene un formato estático, la podrías crear y asignar tú mismo, sin necesidad de conversión previa, y por lo tanto usar una única acción Intent de Tasker.
Caravantes
01/07/18, 23:20:54
+> File > Open File (MIME = image/*)
Muchas gracias.
Abrir archivo [ Archivo:%FotoNueva Tipo Mime:image/* ]
Efectivamente, confirmo que funciona.
Mitrhandir
02/07/18, 18:22:13
Buenas! El taskero misterioso soy yo :risitas:
Voy a ver si las soluciones que habéis aportado sirven :palomitas:
Un saludo!
Mitrhandir
02/07/18, 23:04:15
Profile: Nuevo Archivo Cámara Event: File Modified [ File:DCIM/Camera/ ]
Oye! Pues funciona! Cuando abro la galería de fotos ocurre también, como alguien ha comentado. Pero bueno, hace su función!
Saludos!
WillyWeb
02/07/18, 23:21:07
¿Ahora te funciona? :oh:
¿Qué has cambiado?
Y lo de que salte con la galería se arregla añadiendo al perfil un contexto con la app de la cámara, o todas aquellas con las que quieras que salte.
vBulletin® v3.8.1, Copyright ©2000-2026, Jelsoft Enterprises Ltd.