Creando una Aplicación Android que responda ante comandos de Voz mediante Inteligencia Artificial y Machine Learning – Parte 5
En esta página:
Continuaremos con el capitulo anterior llamado Creando una Aplicación Android que responda ante comandos de Voz mediante Inteligencia Artificial y Machine Learning – Parte 4, en donde configuramos el Adapter para los mensajes, este se encargará de de gestionar y manipular los mensajes para una correcta comunicación entre el usuario y la Inteligencia Artificial, en esta Parte 5 continuaremos con la creación de la aplicación.
Partes
- Parte 1
- Parte 2
- Parte 3
- Parte 4
- Parte 5
- Parte 6
- Parte 7
- Parte 8
- Parte 9
- Parte 10
- Parte 11 (Final, Demo, Código Fuente en GitHub)
Antes de continuar con este Post te invito a escuchar el Podcast: “5 Consejos para ser un Programador más Productivo” (No son los clásicos consejos técnicos de programación, si no de rutinas y buenos hábitos cotidianos):
Spotify:
Sound Cloud:
Bien ahora continuemos con el Post: Creando una Aplicación Android que responda ante comandos de Voz mediante Inteligencia Artificial y Machine Learning – Parte 5.
En este Post voy a crear 2 Handlers para la aplicación, estos handlers me permitirán manejar acciones avanzadas, como las solicitudes del usuario a la Inteligencia Artificial, asimismo configuraremos un par de Tokens y creare unos métodos para que la aplicación pueda enviar y detener el envió de a la Inteligencia Artificial pueda.
Handlers
Para mantener un orden voy a crear un directorio con el nombre handlers en donde colocaré todos los Handlers de la aplicación.
vozHandler
El primer handler que creare es en el archivo vozHandler.kt, será de tipo objeto de Kotlin, este archivo lo creo en java > com.example.iapostresapp > handlers > vozHandler.kt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
/app ├── /manifests ├── /java ├── /com.example.iapostresapp ├── /handlers ├── vozHandler.kt // Creo este Archivo ├── MainActivity ├── MensajesAdapter.kt ├── /java (generated) ├── /res ├── /res (generated) /Gradle Scripts |
Abro el archivo creado vozHandler.kt y a mi objeto vozHandler le agrego la interface TextToSpeech.OnInitListener para hacer uso del motor TextToSpeech de Google que leerá en voz alta el texto correspondiente de los mensajes de la conversación en el Chat.
1 2 3 4 5 6 7 |
object vozHandler : TextToSpeech.OnInitListener { // Acá el código del objeto vozHandler } |
Luego creo una variable privada llamada textoaVoz en donde llamo al motor TextToSpeech de Google y 3 funciones llamadas definirContexto, reproducir y detener
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
object vozHandler : TextToSpeech.OnInitListener { private var textoaVoz: TextToSpeech? = null fun definirContexto(context: MainActivity) { textoaVoz = TextToSpeech(context, this) } fun reproducir(textToSpeak: String?) { textoaVoz?.speak(textToSpeak, TextToSpeech.QUEUE_ADD, null, null) } fun detener() { textoaVoz?.stop() } override fun onInit(status: Int) {} } |
A continuación el código completo del archivo vozHandler.kt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
package com.example.iapostresapp.handlers import android.speech.tts.TextToSpeech import com.example.iapostresapp.MainActivity object vozHandler : TextToSpeech.OnInitListener { private var textoaVoz: TextToSpeech? = null fun definirContexto(context: MainActivity) { textoaVoz = TextToSpeech(context, this) } fun reproducir(textToSpeak: String?) { textoaVoz?.speak(textToSpeak, TextToSpeech.QUEUE_ADD, null, null) } fun detener() { textoaVoz?.stop() } override fun onInit(status: Int) {} } |
Bien ahora pasemos a la creación del siguiente handler.
keyHandler
El siguiente handler que crearé es en el archivo keyHandler.kt, será de tipo objeto de Kotlin, este archivo lo creo en java > com.example.iapostresapp > handlers > keyHandler.kt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
/app ├── /manifests ├── /java ├── /com.example.iapostresapp ├── /handlers ├── keyHandler.kt // Creo este Archivo ├── vozHandler.kt ├── MainActivity ├── MensajesAdapter.kt ├── /java (generated) ├── /res ├── /res (generated) /Gradle Scripts |
Bien abro el archivo keyHandler.kt que he creado, en este archivo voy a definir 2 Tokens para que la aplicación pueda consumir los servicios de Inteligencia Artificial y Machine Learning de Google (En otra parte hablaremos sobre estos servicios de Google).
Inicializo 2 variables de tipo String con el modificador lateinit, esta tendrán por nombre DEVELOPER_ACCESS_TOKEN y CLIENT_ACCESS_TOKEN.
Luego creo una función llamada definirContexto y dentro de ella creo 2 variables finales (val) llamadas jsonString y jsonObjeto, dentro de la variable jsonString voy a leer los tokens que se encuentran en el archivo tokens, este archivo estará en formato JSON, es decir su nombre original es tokens.json (El archivo tokens.js lo veremos más adelante)
En la variable jsonObjeto hago uso de la clase JSONObject y asigno la variable jsonString, luego llamo a las variables DEVELOPER_ACCESS_TOKEN y CLIENT_ACCESS_TOKEN creadas anteriormente y dentro de ambas coloco el token correspondiente de cada variable
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
package com.example.iapostresapp.handlers import ai.api.util.IOUtils import com.example.iapostresapp.MainActivity import com.example.iapostresapp.R import org.json.JSONObject object KeyHandler { lateinit var DEVELOPER_ACCESS_TOKEN: String lateinit var CLIENT_ACCESS_TOKEN: String fun definirContexto(mainActivity: MainActivity) { val jsonString = IOUtils.readAll(mainActivity.resources.openRawResource(R.raw.tokens)) val jsonObjeto = JSONObject(jsonString) DEVELOPER_ACCESS_TOKEN = jsonObjeto.getString("DEVELOPER_ACCESS_TOKEN") CLIENT_ACCESS_TOKEN = jsonObjeto.getString("CLIENT_ACCESS_TOKEN") } } |
Bien ya tengo creado los 2 handlers respectivos para mi proyecto.
Tokens de Acceso
Ahora vamos a crear el archivo tokens.js, este archivo lo creo en res > raw > tokens.js, si no tienes la carpeta raw, pues créala no hay problema.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
/app ├── /manifests ├── /java ├── /java (generated) ├── /res ├── /drawable ├── /layout ├── /mipmap ├── /raw ├── tokens.json // Creo este Archivo ├── /values ├── /res (generated) /Gradle Scripts |
Bueno en la siguiente Parte de este tutorial, te explicaré como obtener los tokens que serán colocados en el archivo tokens.json y deberían de verse así:
1 2 3 4 5 6 |
{ "DEVELOPER_ACCESS_TOKEN": "MI-DEVELOPER-ACCESS-TOKEN", "CLIENT_ACCESS_TOKEN": "MI-ACCESS-TOKEN" } |
Ten Paciencia, lo que quiero es que entiendas todo el proceso de como crear la aplicación y no llenarte el capitulo de mucho contenido porque te puedes marear y no tendrás un óptimo aprendizaje.
Nota(s)
- En el siguiente capitulo crearé una Tarea asíncrona (Async Task), instanciaré las dependencias que usaré en la aplicación y otros detalles.
- No olvides que debemos usar la Tecnología para hacer cosas Buenas por el Mundo.
Síguenos en nuestras Redes Sociales para que no te pierdas nuestros próximos contenidos.
- Android Inteligencia Artificial Kotlin Machine Learning Tutoriales
- 02-03-2020
- 28-06-2020
- Crear un Post - Eventos Devs - Foro