Bueno, os presento parte de mi último proyecto, una tarea para llamar por voz (ya hay algunas publicadas en el foro) pero que tiene un "plus": permite escoger entre varios contactos que tienen coincidencia de patrón con el nombre que se diga.
REQUERIMIENTOS
- Necesitamos tener instalado el plugin Autocontacts
- Tener conexión de Red en 3G, WiFi o haber bajado los archivos de reconocimiento de voz offline desde Google
http://www.htcmania.com/showthread.p...hlight=offline
ANTECEDENTES Y PREPARACIÓN DE LA LISTA DE CONTACTOS
a) En principio tenia una lista de contactos con más de 500 entradas que he revisado para pulirla (eliminando contactos que ni recuerdo, añadiendo el oficio/profesión después del nombre, estableciendo el nº de teléfono predeterminado, etc.) quedando finalmente en 430 (2 horas de trabajo en los contactos de mi cuenta en el ordenador)
Pues bién, la búsqueda con Autocontacts usando la variable %acname te devuelve el primer contacto encontrado pero prescinde de los otros. Así se plantea en la mayoria de tareas publicadas en el foro para llamar por voz. Esto es generalmente suficiente con una base de 20 o 30 contactos, pero en mi caso, y supongo que en el de otros muchos, no sirve. A veces el que necesito es otro José Sánchez u otro Juan Garcia, o simplemente recuerdo el nombre y tengo 10 contactos con el mismo...
b) He planteado la tarea tanto para poder ejecutarla desde un widget (el reconocimiento de voz dentro de la tarea se hace con el Captar voz y no precisamos tener Autovoice), como para activarla mediante un perfil con un comando de voz si tenemos AV instalado. Además todas la variables de uso en la propia tarea son locales.
c) He añadido a mis contactos la profesión o cualquier texto identificativo del contacto (abogado, ingeniero, electricista, tendero de la esquina,...). Esto nos permite hacer la búsqueda por cualquier palabra que figure en el nombre del contacto, y la tarea me devolverá la lista de abogados, electricistas, etc.. En fin, una especie de Páginas Amarillas de mis contactos.
d) He eliminado los Nicknames que no eran nombres del diccionario (p.e. Mei, Mian, Jep,...) ya que AC no los encuentra.
LA TAREA: DESCRIPCIÓN FUNCIONAL
- Desactiva el reconocimiento de voz por AVcontinuous por si venimos desde un perfil.
- Empieza preguntando el nombre del contacto y guardándolo en la variable local %nom
- Busca el nombre con AC y, entonces, Pueden darse 3 situaciones:
1) Si no lo encuentra me pide que repita y vuelve a esperar respuesta
2) Si encuentra 1 contacto solamente, nos lee el contacto completo indicando el tipo de teléfono (casa, móvil o trabajo) y nos pide confirmación para llamar.
3) Si encuentra más de uno nos dice el número de contactos encontrados y nos los lee asignando un número a cada uno. Cuando termina, nos da la opción de repetir la lista o decir el número del contacto al que queremos llamar, nos lo lee y actúa como en el caso anterior.
- Activa el altavoz y llama al contacto con marcado automático
- Finalmente vuelve a poner AV continuous en su estado inicial si estaba activado al iniciar la tarea (caso de venir de un perfil)
La tarea está depurada funcionalmente (no se queda colgada) aunque no me he entretenido en repasar si se puede "pulir" el código, si hay acciones prescindibles. En cambio se pueden simplificar las acciones Decir, por ejemplo eliminando la confirmación final (acciones A41..A46 ambas inclusive).
Salvo los nombres de las variables, la he traducido al castellano.
LA TAREA: EL TEXTO CON COMENTARIOS
Llamar_contacto_plus (191)
Esta primera parte es para desactivar AV si ejecutamos la tarea desde un perfil de reconocimiento de voz con AV. La acción A4 introduce una espera de 1 seg. porque si no, se me cortaba el principio de A5: Decir
A1: Si (if) [ %AVactivat ~ 1 ]
A2: AutoVoice Continuous [ Configuración: Stopping continuous voice recognition Paquete:com.joaomgcd.autovoice Nombre:AutoVoice Continuous Cuenta atrás (segundos):0 ]
A3: Fin si (End if)
A4: Esperar [ MS:0 Segundos:1 Minutos:0 Horas:0 Días:0 ]
Nos pide el nombre del contacto, profesión, apellido,... que queremos buscar y lo ponemos en la variable %nom
A5: Decir [ Texto

i el nombre del contacto Motor: Voz:default:default Stream:3 Tono:5 Velocidad:5 Respetar Foco Audio:Encendido Red:Apagado Continuar tarea inmediatamente:Apagado ]
A6: Esperar [ MS:0 Segundos:1 Minutos:0 Horas:0 Días:0 ]
A7: Anchor
A8: Captar Voz [ Título:NOMBRE DEL CONTACTO? Modelo Lenguaje:Forma libre Resultados Máximos:1 Cuenta atrás (segundos):30 ]