En este Post continuaremos con la Parte anterior llamada Creando una Aplicación Android que responda ante comandos de Voz mediante Inteligencia Artificial y Machine Learning – Parte 5 en donde configuramos los Handlers y el archivo token.js en donde accedo a los tokens de seguridad de un servicio que usaremos mas adelante, en este Post continuaremos con la creación del nuestra 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: “Dominio del trabajo con Varios Lenguajes de Programación.”
Sound Cloud:
Spotify:
Bien ahora continuemos con el Post: Creando una Aplicación Android que responda ante comandos de Voz mediante Inteligencia Artificial y Machine Learning – Parte 6.
Voy a crear una tarea asíncrona para que la aplicacion se ejecute en la misma interface UI sin tener que recargar la Actividad (Activity).
Tarea Asíncrona (Async Task)
Es importante mantener el orden, así que voy a crear crear un directorio con el nombre asynctasks en donde colocaré una tarea asíncronas útil para la aplicación.
tareaGestionarEntidades
Esta tarea asíncrona que creare es en el archivo tareaSolicitudIA.kt, será de tipo Class (Clase Kotlin), este archivo lo creo en java > com.example.iapostresapp > asynctasks > tareaSolicitudIA.kt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
/app ├── /manifests ├── /java ├── /com.example.iapostresapp ├── /asynctask ├── tareaSolicitudIA.kt // Creo este Archivo ├── /handlers ├── MainActivity ├── MensajesAdapter.kt ├── /java (generated) ├── /res ├── /res (generated) /Gradle Scripts |
Abro el archivo creado tareaSolicitudIA.kt y agrego el siguiente código en los 2 métodos llamados doInBackground y on PostExecute que pertenecen a la clase AsyncTask de Android. (En el código he colocado comentarios para explicar que hace cada línea de código o método):
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 27 28 29 30 31 32 33 34 |
package com.example.iapostresapp.asynctasks import ai.api.AIServiceContext import ai.api.android.AIDataService import ai.api.model.AIRequest import ai.api.model.AIResponse import android.app.Activity import android.os.AsyncTask import com.example.iapostresapp.MainActivity /** * Clase que manejará la comunicación con el Bot de forma asincrónica. */ class tareaSolicitudIA(private val activity: Activity, private val aiDataService: AIDataService, private val customAIServiceContext: AIServiceContext) : AsyncTask<AIRequest, Void, AIResponse>() { /** * Utilizamos un miembro del Servicio de Inteligencia Artificial (Lo veremos más adelante) para realizar una solicitud. */ override fun doInBackground(vararg aiRequests: AIRequest?): AIResponse { val solicitud = aiRequests[0] return aiDataService.request(solicitud, customAIServiceContext) } /** * Una vez que se hace la solicitud, la respuesta se envía a la actividad principal (Main Activity), que la maneja. */ override fun onPostExecute(aiResponse: AIResponse?) { (activity as MainActivity).requestCallback(aiResponse) } } |
Dependencias build.gradle (Module: app)
En nuestro proyecto tenemos el archivo llamado build.gradle (Module: app), este archivo se encuentra en Gradle Scripts > build.gradle (Module: app)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
/app ├── /manifests ├── /java ├── /com.example.iapostresapp ├── /asynctask ├── tareaSolicitudIA.kt ├── /handlers ├── MainActivity ├── MensajesAdapter.kt ├── /java (generated) ├── /res ├── /res (generated) /Gradle Scripts ├── build.gradle (Project: IA Postres APP) ├── build.gradle (Project: Module: APP) // Abro este Archivo ├── gradle-wrapper.properties (Gradle Version) ├── proguard-rules.pro (ProGuard Rules for app) ├── gradle.properties (Project Properties) ├── settings.gradle (Project Settings) ├── local.properties (SDK Location) |
Abro el archivo build.gradle (Module: app) y agrego las siguientes dependencias y configuraciones:
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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' android { compileSdkVersion 28 defaultConfig { applicationId "com.example.restbot" minSdkVersion 21 targetSdkVersion 28 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } packagingOptions { exclude 'META-INF/DEPENDENCIES' exclude 'META-INF/LICENSE' exclude 'META-INF/LICENSE.txt' exclude 'META-INF/license.txt' exclude 'META-INF/NOTICE' exclude 'META-INF/NOTICE.txt' exclude 'META-INF/notice.txt' exclude 'META-INF/ASL2.0' exclude 'META-INF/INDEX.LIST' } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) //implementation 'com.android.support:appcompat-v7:28.0.0' implementation 'androidx.appcompat:appcompat:1.1.0' implementation 'com.android.support.constraint:constraint-layout:1.1.3' implementation 'androidx.appcompat:appcompat:1.1.0' implementation 'androidx.core:core-ktx:1.1.0' implementation 'androidx.appcompat:appcompat:1.1.0' implementation 'androidx.constraintlayout:constraintlayout:1.1.3' implementation 'androidx.cardview:cardview:1.0.0' implementation 'com.google.android.material:material:1.0.0' testImplementation 'junit:junit:4.12' // Dependencias del Dialogflow SDK implementation 'ai.api:sdk:2.0.7@aar' implementation 'ai.api:libai:1.6.12' implementation 'io.grpc:grpc-okhttp:1.17.1' androidTestImplementation 'androidx.test:runner:1.2.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" } apply plugin: 'com.google.gms.google-services' |
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 configuraremos los métodos en la Actividad Principal, es decir en el archivo MainActivity.kt
- 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.