1
CURSO
ANDROID
ANDROID 2
TEMARIO
1. Comenzar a Trabajar con Android
2. Lenguaje Java para Android
3. Activities
4. Layouts
5. Vistas, Widgets y Estilos
6. Menus
7. Persistencia en Android y QLite
8. Intents
9. Services
[Link] Localización y Mapas
[Link] Media - fotos y videos
3
MÓDULO 1
COMENZAR A TRABAJAR CON
ANDROID
TEMA 1. 4
SOFTWARE DE INSTALACIÓN
▸ Kit de desarrollo de Java (JDK) versión 8 o superior
[Link]
[Link]
▸ Android Studio
[Link]
TEMA 1 5
¿QUÉ ES ANDROID?
▸ Sistema operativo para móviles
▸ Basado en el Kernel de Linux
▸ Utiliza una JVM propia: DALVIK
▸ Se puede desarrollar en dos lenguajes:
▸ Java
▸ Kotlin
MÓDULO 1 6
TIPOS DE APLICACIONES ANDROID
▸ Aplicación de Primer Plano
Aplicación que requiere la interacción con el usuario. Ej. Explorador
web.
▸ Aplicación de Segundo Plano
Pasa la mayor parte del tiempo en segundo plano. Ej. Aplicación de
llamadas.
▸ Aplicación Intermitente
Útil tanto en primer como en segundo plano. Ej. Aplicación de correo.
▸ Widget
Pequeñas aplicaciones en el escritorio
MÓDULO 1 7
COMPONENTES DE UNA APLICACIÓN ANDROID
▸ Bloques de construcción de una app Android
▸ Tipos:
Activities
Services
Content Providers
Intents
Broadcast Receivers
Widgets
Notifications
▸ El fichero [Link] define y describe como interactúan
ANDROID 8
ACTIVITIES
▸ Punto de entrada de una interacción con el usuario
▸ Representa una pantalla individual con un UI
▸ Cada Activity es independiente de las demás pero puede
ser iniciada por otra.
▸ Formada por Views que son el equivalente a los controles
de las aplicaciones de escritorio (Button, TextView, etc...)
ANDROID 9
SERVICES
▸ Es un punto de entrada general
▸ Permite mantener la ejecución de la aplicación en segundo plano
(reproducir música, captura de datos…)
▸ No proporciona una interfaz de usuario
▸ Se ejecuta cuando una aplicación indica que quiere usarlos
▸ Utilidades:
▸ Actualizan las Activities visibles
▸ Lanzan Notifications
MÓDULO 1 10
INTENTS
▸ Framework de paso de mensajes entre aplicaciones
▸ Se utiliza para pedir acciones a otras aplicaciones
MÓDULO 1 11
BROADCAST RECEIVER. (RECEPTORES DE EMISORES)
▸ Permite al sistema entregar a la aplicación eventos que no están en el
flujo del usuario.
▸ Permite a la aplicación responder a los emisores de anuncios de todo
el sistema (por ejemplo que se apagó la pantalla, nivel de carga de la batería…)
▸ No tiene una interfaz de usuario pero si crea una notificación en la
barra de estado
▸ Son los que reciben los Intents
▸ Ejecutan automáticamente la aplicación al recibir el mensaje que ha
sido programador para escuchar
MÓDULO 1 12
PROVEEDOR DE CONTENIDO
▸ Administra un conjunto de datos compartidos que pueden
ser almacenados:
▸ en un sistema de archivos,
▸ en una base de datos SQLite
▸ en la Web
▸ en otros sistemas de almacenamiento
MÓDULO 1 13
WIDGETS
▸ Son componentes que se añaden al escritorio del usuario
MÓDULO 1 14
NOTIFICATIONS
▸ Permiten avisar al usuario sin interrumpir las Activities que
hay en primer plano.
MÓDULO 1 15
CONTENT PROVIDERS
▸ Almacenes de datos compartidos
▸ Se utilizan para intercambiar información entre procesos
ANDROID 16
EL ARCHIVO MANIFIESTO
▸ [Link]
▸ La aplicación declara todos sus componentes en este archivo
▸ Identifica los permisos de usuarios requeridos por la app
▸ Declara el nivel de API mínimo que requiere la app
▸ Declara las características de HW y SW que la app usa o
necesita
▸ Declara bibliotecas de la API que necesita (además de las API
del marco de trabajo de Android)
ANDROID 17
EL ARCHIVO MANIFIESTO
ANDROID 18
RECURSOS DE LA APLICACIÓN
▸ En Android, una aplicación no solo está compuesta de
código, además requiere recursos como: imágenes,
archivos de audio, menús, estilos, colores, diseños de
interfaces de activities.
▸ Son archivos XML
▸ Para cada recurso, el compilador SDK define un ID único
puede ser usado para hacer referencia al mismo desde el
código o desde otros recursos definidos en el XML
ANDROID 19
RECURSOS DE APLICACIÓN (2)
▸ Ejemplo: Si la app tiene un archivo de imagen llamado
[Link] en el directorio res/drawable/ SDK genera un ID
de recurso llamado [Link]
▸ Nos permite los valores de los recursos a otros idiomas
res/values-fr/
res/values-eu/
ANDROID 20
DECLARAR UNA ACTIVITY
▸ Es la forma en que le informamos al SO Android sobre
nuestra clase de actividad y cómo se puede solicitar.
▸ Por ejemplo, una aplicación normalmente muestra un
icono de escritorio y sirve como punto de entrada
principal a la aplicación.
ANDROID 21
DECLARAR UNA ACTIVITY
▸ Para que una app use activities, deben ser declaradas en
el manifiesto
▸ En manifests/[Link]
<manifest ... >
<application ... >
<activity android:name=".ExampleActivity" />
...
</application ... >
...
</manifest >
ANDROID 22
NUESTRO ACTIVITY
▸ [Link]
<activity android:name=".MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name=“[Link]"/>
<category android:name="[Link]"/>
</intent-filter>
</activity>
ANDROID 23
ABRIR UN SEGUNDO ACTIVITY DESDE UN PRIMER ACTIVITY
▸ Para abrir un activity usando intent:
Intent intent = new Intent(this,
[Link]);
startActivity(intent);
ANDROID 24
ABRIR UN NUEVO ACTIVITY PASANDO DATOS
▸ Abrir un segundo intent pasado datos:
Intent intent = new Intent(this,
[Link]);
String texto = “Hola”
[Link]("dato",texto);
startActivity(intent);
ANDROID 25
LEER DATOS PASADOS EN UN INTENTO
▸ Leer datos pasados a un segundo Activity:
if(getIntent()!= null && getIntent().hasExtra("dato"))
{
String texto = getIntent().getStringExtra("dato");
}
ANDROID 26
CERRAR UN ACTIVITY
▸ Cerrar
finish();
ANDROID 27
GUARDAR EL ESTADO DE UN ACTIVITY
▸ vamos a manejar las devoluciones de llamada
onSaveInstanceState () y onRestoreInstanceState () para
guardar el estado de su aplicación
ANDROID 28
CICLO DE VIDA DE UN ACTIVITY
ANDROID 29
CICLO DE VIDA DE UN ACTIVITY
▸ onCreate()
▸ Se le puede llamar en tres situaciones
• Cuando se ejecuta por primera vez
• Cuando se ejecuta después de haber sido matada porAndroid. En este caso
tendrá un objeto Bundle como parámetro para restaurar la interfaz.
• Cuando hay un cambio de vertical a horizontal en la pantalla
▸ En el se crea el interfaz, variables, servicios, hilos,…
ANDROID 30
CICLO DE VIDA DE UN ACTIVITY
▸ onDestroy()
▸ Libera los recursos creado en onCreate
▸ Tener en cuenta que un Activity puede terminar sin
llamar a este método
▸ onStart()
▸ El activity va a pasar a primer plano, porque se acaba de
crear o porque estaba en segundo plano
ANDROID 31
CICLO DE VIDA DE UN ACTIVITY
▸ onResume()
▸ Se llama justo antes de que el Activity pase a segundo plano
▸ Reanuda animaciones, hilos, servicios y en general procesos que se utilizan
para actualizar la UI
▸ Registrar BroadCast Receibers
▸ onPause()
▸ Se ejecuta cuando el activity a pasar a segundo plano
▸ Pausa animaciones, hilos, servicios y en general procesos que se utilizan para
actualizar la UI
▸ Dar de baja BroadCast Receibers
ANDROID 32
CICLO DE VIDA DE UN ACTIVITY
▸ onStop()
▸ Se llama cuando un activity va a ser pasado porque va a
pasar a segundo plano
▸ Android no asegura la llamada a este método
▸ onRestart()
▸ Se ejecuta cuando el activity pasa de segundo plano a
primer plano por acción del usuario
ANDROID 33
CREAR Y APLICAR UN ESTILO
▸ Abrir el fichero res/values/[Link]
▸ Añadir un elemento <style> con un nombre que
identifique de forma exclusiva el estilo.
▸ Añadir un elemento <item> para cada atributo de estilo
que desee definir.
▸ El nombre en cada elemento se usa como atributo XML en
el diseño.
ANDROID 34
LAYOUT
▸ LinearLayout
Los componentes se ponen en línea de izda a derecha
ANDROID 35
LINEARLAYOUT - ORIENTACIÓN
▸ Vertical
android:orientation="vertical">
▸ Horizontal
android:orientation=“horizontal">
ANDROID 36
LINEARLAYOUT - DISPOSICIÓN
▸ Vertical
android:orientation="vertical">
▸ Horizontal
android:orientation=“horizontal">
ANDROID 37
IMAGEN
▸ ImageView
ANDROID 38
CREAR Y APLICAR UN ESTILO
▸ res/values/[Link]
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name=“TextoVerde" parent="[Link]">
<item name="android:textColor">#00FF00</item>
</style>
</resources>
▸ En el layout
<TextView
style="@style/GreenText"
... />
ANDROID 39
APP NOTAS
ANDROID 40
APP NOTAS
ANDROID 41
APP NOTAS - CREAR PROYECTO
▸ File - > New Adrodproyect
▸ Nombre : NotasApp
▸ Plantilla : Basic Activity
ANDROID 42
APP NOTAS. - TEXTOS APLICACIÓN
▸ Preparar los textos de la aplicación
▸ Abrir [Link] del directorio /res/values
<resources>
<string name="app_name">Notas</string>
<string name="hello_world">Hello world!</string>
<string name="action_settings">Settings</string>
<string name="action_add">add</string>
<string name="title_hint">Titulo</string>
<string name="description_hint">Descripción</string>
<string name="idea_text">Idea</string>
<string name="important_text">Importante</string>
<string name="todo_text">Tarea</string>
<string name="cancel_button">Cancelar</string>
<string name="ok_button">OK</string>
<string name="settings_title">Settings</string>
<string name="theme_title">Theme</string>
<string name="theme_light">Light</string>
<string name="theme_dark">Dark</string>
</resources>
ANDROID 43
APP NOTAS. - CLASE NOTA
▸ Crear una nueva clase Java llamada Nota
plass class Nota {
String titulo;
String descripcion;
Bolean idea;
Bolean tarea;
Bolean importante;
}
ANDROID 44
APP NOTAS. - DISEÑAR LA VENTANA DE DIALOGO NUEVA NOTA
▸ Crear un nuevo layout
▸ Ir a la carpeta /layout y crear un nuevo Layout
resourceFile.
▸ Nombre dialog_nueva_nota
▸ Root:
[Link].
ANDROID 45
APP NOTAS. - DISEÑAR LA VENTANA DE DIALOGO NUEVA NOTA
ANDROID 46
APP NOTAS. - DISEÑAR LA VENTANA DE DIALOGO VER NOTA
ANDROID 47
INTENT
▸ Es una declaración de necesidades.
▸ Un objeto Intent está formado fragmentos de información que describen la
acción o servicio deseado.
▸ Desde la aplicación creamos un Intent y lo enviamos .
▸ El sistema evalúa los elementos Activity y Service disponibles y los
BroadcastReceiver registrados y redirige el Intent al receptor más adecuado.
▸ Usos principales
Iniciar un Activity
Iniciar un Service
Transmitir una emisión
ANDROID 48
INICIAR UN ACTIVITY CON UN INTENT
▸ vamos a utilizar un objeto Intent para iniciar una de las
aplicaciones integradas de Android en lugar de crear una
nueva
▸ En [Link] crear la siguiente función:
public void launchIntent(View view) {
Intent intent = new Intent(Intent.ACTION_VIEW);
[Link]([Link]("[Link]
startActivity(intent);
}
ANDROID 49
INVOCACIÓN IMPLÍCITA Y EXPLICITA
▸ Invocación implícita:
▸ Es la plataforma la que determina qué componente es
el más indicado para procesar el Intent a través de un
proceso de resolución con la acción, datos y categoría.
▸ Invocación explícita:
▸ El código especifica qué componentes debe procesar el
Intent, especificando la clase, o el nombre del
componente.
ANDROID 50
EJEMPLO INTENT EXPLÍCITO
▸ Ejemplo: Iniciar una Activity
// Declarar e inicializar un objeto Intent llamado miIntent
Intent myIntent = new Intent(this, [Link])
// Cambiar a SettingsActivity
startActivity(myIntent)
ANDROID 51
EJEMPLO INTENT IMPLÍCITO
▸ Ejemplo: Buscar un contacto concreto para iniciar una
llamada, enviar un SMS, etc ...
• La acción será ACTION_VIEW
• la URI será content://contacts/people/1234
Intent myIntent = new Intent(Intent.ACTION_VIEW,
[Link](“content://contacts/peope/1234”);
startActivity(myIntent);
ANDROID 52
CÓMO DEFINIR UN INTENT IMPLÍCITO
▸ Los elementos principales de un Intent son:
• el atributo de acción
• es un verbo que describe lo que deseamos hacer
• ejemplo: VIEW, PICK, EDIT ...
• la clase Intent define diferentes acciones, por ej.
[Link].ACTION_VIEW
• el programador puede crear nuevas acciones
• el componente de datos
• describe el objeto que solicitamos
• se expresa como una URL
• puede contener cualquier fragmento de información
• Ej. Búsqueda de contactos content://contacts/people
ANDROID 53
INTENT FILTER
▸ Permite indicar a Android que componentes va a procesar
la petición de un Intent concreto.
▸ Un Intent Filter determina qué Activity, Service o
BroadCast Reciber puede responder a un Intent.
▸ Cada componente debe registras su propio Intent Filter
para cada Intent que atiende.
▸ Para ello añade una etiqueta <intent-filter> en el fichero
[Link]
ANDROID 54
INTENT FILTER
▸ [Link]
<application ... >
<activity
android:name=“[Link]”
android:label="@string/app_name" >
<intent-filter>
<action android:name="[Link]" />
<category
android:name="[Link]" />
</intent-filter>
ANDROID 55
INTENT FILTER - EJEMPLO
▸ [Link]. Definir Intent filter
<intent-filter . . . >
<action android:name="[Link]" />
<data android:scheme="weather" android:host="[Link]"/>
. . .
</intent-filter>
▸ En el activity. Crear Intent
Intent intent = new Intent( Intent.ACTION_VIEW,
[Link](“weather://[Link]/loc?zip=48009”);
ANDROID 56
DATOS DE EJEMPLO
weather://[Link]/loc?zip=1234
SCHEMA AUTHORITY/ PATH
HOST
ANDROID 57
ABRIR OTRO ACTIVITY
▸ Ejemplo:
// Declarar e inicializar un objeto Intent llamado miIntent
Intent myIntent = new Intent(this, [Link])
// Cambiar a SettingsActivity
startActivity(myIntent)
ANDROID 58
INTENT - PASAR DATOS ENTRE ACTIVITIES
▸ Ejemplo
String username = “Carlos”
Intent myIntent = new Intent(this, [Link])
[Link]("USER_NAME", username)
startActivity(myIntent)
ANDROID 59
RECUPERAR EL RESULTADO DE UN ACTIVITY
▸ Cuando queremos recoger un resultado tras llamar a un
Activity, debemos:
▸ En la Activity que hace la llamada:
▸ iniciarla usando el método startActivityForResult(...)
▸ implementar el método onActivityResult()
▸ En la Activity que responde:
▸ puede llamar al método setResult(int) para devolver un
resultado
ANDROID 60
RECUPERAR RESULTADOS - CÓDIGO
▸ Paso 1. El Activity 1 que llama al Activity 2
startActivityForResult(MI_ID_PETICION);
▸ Paso 2. El Activity 2 que devuelve datos el resultado
Intent resultData = new Intent();
[Link]("valueName", "valueData");
setResult(Activity.RESULT_OK, resultData);
finish();
ANDROID 61
RECUPERAR RESULTADOS - CÓDIGO (2)
▸ Paso 3. El Activity 1 que procesa los datos de la respuesta
Activity 1 sobreescribe el método que procesará la
respuesta de vuelta
protected void onActivityResult(int requestCode,
int resultCode, Intent data) {
if (requestCode == MI_ID_PETICION){
if (resultCode == RESULT_OK) {
String myValue = [Link]("valueName");
}
}
}
ANDROID 62
SHAREDPREFERENCES
▸ Permite guardar información para usarla en otro momento
▸ Los datos se almacenan en pares de clave y valor en
ficheros
▸ Pueden ser :
▸ privados Context.MODE_PRIVATE
▸ Públicos Context.MODE_WORLD_READABLE o
Context.MODE_WORLD_WRITEABLE
ANDROID 63
PERSISTIR DATOS CON SHAREDPREFERENCES
▸ Obtener el fichero de preferencia por defecto:
Preferences prefs = getSharedPreferences(Context.MODE_PRIVATE)
▸ Obtener el fichero de preferencia por su nombre:
//obtener el contexto de la aplicación
Context context = [Link]();
//obtenemos un SharedPreferences y creamos un fichero Privado bajo el
//nombre definido con la clave preference_file_key en [Link]
Preferences prefs = [Link](
getString([Link].preference_file_key),
Context.MODE_PRIVATE);
ANDROID 64
PERSISTIR DATOS CON SHAREDPREFERENCES
▸ Grabar datos
// una instancia de [Link] para escribir datos
val editor = [Link]()
[Link]("usuario", “luis”)
[Link]("cantidad", 2)
[Link]("activo", true)
// Grabar todos los datos
[Link]()
ANDROID CON KOTLIN 65
PERSISTIR DATOS CON SHAREDPREFERENCES
▸ Leer datos
val usuario = [Link]("usuario", “nuevo usuario")
val cantidad = [Link]("cantidad", 1)
val activo = [Link]("activo", false)
ANDROID CON KOTLIN 66
JSON
▸ JavaScript Object Notation
▸ Ejemplo
[{
"nombre":"John",
"edad":30,
"direccion": {
“calle":"Los chopos, 1”,
"CP":"48000",
"Localidad":"Bilbao"
}
}]
ANDROID CON KOTLIN 67
LOCALIZACIÓN
▸ Android permite soportar varios idiomas
▸ Se crea una carpeta values-codigoIdioma por cada idioma
soportado
<resource type>-b+<language code>[+<country code>]
/MyProject/
res/
values/
[Link]
values-en/
[Link]
ANDROID CON KOTLIN 68
AÑADIR SOPORTE TEXTOS VARIOS IDIOMAS
▸ Seleccionar el fichero
[Link]
▸ menú contextual
“Open traslator
Editor”
▸ Añadir un nuevo
idioma
ANDROID CON KOTLIN 69
TRADUCIR TEXTOS
▸ Traducir los textos
ANDROID CON KOTLIN 70
CAMBIO IDIOMA DISPOSITIVO ANDROID
▸ En el emulador ir a la app Settings
▸ Añadir nuevo idioma
▸ Seleccionar el idioma a mostrar
ANDROID CON KOTLIN 71
MOSTAR UN TEXTO DESDE CÓDIGO
▸ Añadir el texto
<string name=“añadir_nueva_nota">Añadir una nueva nota</string>
ANDROID CON KOTLIN 72
ANIMACIONES
▸ Permite añadir elementos visuales que les informen a los
usuarios sobre lo que sucede en tu app
▸ Android incluye diferentes API de animación
ANDROID CON KOTLIN 73
ANIMACIÓN DE PROPIEDADES
▸ Permite definir una animación para cambiar cualquier
propiedad de un objeto a lo largo del tiempo
▸ Cambia el valor de una propiedad (un campo en un
objeto) durante un período especificado
▸ Parámetros
Duración
Interpolación de tiempo
Repetición
ANDROID CON KOTLIN 74
ANIMACIÓN DE PROPIEDADES
▸ Parámetros
Duración
Retardo
Repetición
Interpolación
android:duration = "666"
android:startOffset = “333”
android:repeatMode = "reverse"
android:repeatCount = “10”
android:interpolator=“@android:anim/accelerate_interpolator"
ANDROID CON KOTLIN 75
ANIMACIÓN CON XML
▸ Transparencia
Alpha es una medida de transparencia y su valor va de 0.0
invisible a1.0 visible
<alpha
android:fromAlpha = "0.0"
android:toAlpha = "1.0" />
ANDROID CON KOTLIN 76
ANIMACIÓN CON XML
▸ Movimiento
Podemos mover un objeto dentro de nuestra IU
fromXDelta y toXDelta pueden tener sus valores establecidos
como un porcentaje del tamaño del objeto que se está animando.
<translate
android:fromXDelta = "-100%"
android:toXDelta = "0%"/>
ANDROID CON KOTLIN 77
ANIMACIÓN CON XML
▸ Escalar
Aumentar o disminuir la escala de un objeto.
<scale
android:fromXScale = "1.0"
android:fromYScale = "0.0"/>
ANDROID CON KOTLIN 78
ANIMACIÓN CON XML
▸ Rotación
Girar respecto a un eje
<rotate
android:fromDegrees = "360"
android:toDegrees = “0”/>
ANDROID CON KOTLIN 79
CONJUNTO DE ANIMACIONES
▸ Podemos agrupar varias animaciones
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="[Link]
…Todas las animaciones van aquí
</set>
ANDROID CON KOTLIN 80
APLICAR UNA ANIMACIÓN
▸ Podemos agrupar varias animaciones
// Declaro uno obj Animation
var animFadeIn: Animation? = null
// Initializarla
animFadeIn = [Link](
this, [Link].fade_in)
// Iniciar la animación en ImageView
[Link](animFadeIn)
ANDROID CON KOTLIN 81
LISTENERS
▸ Declara un oyente AnimationListener e implementar sus
métodos
override fun onAnimationEnd(animation: Animation) {
// Take some action here
}
override fun onAnimationStart(animation: Animation) {
// Take some action here
}
override fun onAnimationRepeat(animation: Animation){
// Take some action here
}
ANDROID CON KOTLIN 82
LISTENERS
▸ Declara un oyente AnimationListener e implementar sus
métodos
override fun onAnimationEnd(animation: Animation) {
// Take some action here
}
override fun onAnimationStart(animation: Animation) {
// Take some action here
}
override fun onAnimationRepeat(animation: Animation){
// Take some action here
}
83
ESTILOS
ANDROID CON KOTLIN 84
DEFINIR LOS ESTILOS
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="[Link]">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<style name="MiEstiloTexto">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:background">#000000</item>
<item name="android:textColor">#AF0000</item>
<item name="android:textSize">20sp</item>
<item name="android:padding">8dp</item>
<item name="android:gravity">center</item>
</style>
</resources>
ANDROID CON KOTLIN 85
APLICAR ESTILO A UN COMPONENTE UI
<TextView
style="@style/MiEstiloTexto"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
ANDROID CON KOTLIN 86
APLICAR ESTILO A TODOS LOS TEXTVIEW
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="[Link]">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:textViewStyle">@style/MiEstiloTexto</item>
</style>
<style name="MiEstiloTexto">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:background">#000000</item>
<item name="android:textColor">#AF0000</item>
<item name="android:textSize">20sp</item>
<item name="android:padding">8dp</item>
<item name="android:gravity">center</item>
</style>
</resources>
ANDROID CON KOTLIN 87
DEFINIR UN NUEVO TEMA
▸ En [Link]
<resources>
<style name="MiTema" parent="[Link]">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name=“colorAccent">@color/colorAccent</item>
<item name="android:textColor">@color/colorAccent</item>
<item name="android:textSize">25sp</item>
</style>
</resources>
ANDROID CON KOTLIN 88
TEMA
▸ Se puede aplicar a toda la app o a un Activity
▸ [Link]
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="[Link]
package="[Link]">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity" android:theme=“@style/MiTema”>
<intent-filter>
<action android:name="[Link]" />
<category android:name="[Link]" />
</intent-filter>
</activity>
</application>
</manifest>
ANDROID CON KOTLIN 89
APLICAR EL NUEVO TEMA
▸ En [Link]
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="[Link]
package="[Link]">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity" android:theme="@style/MiTema">
<intent-filter>
<action android:name="[Link]" />
<category android:name="[Link]" />
</intent-filter>
</activity>
</application>
</manifest>
90
SERVICIOS
ANDROID 91
SERVICIOS EN ANDROID
▸ Componente android que ejecuta instrucciones en
segundo plano.
▸ Este se representa en la clase Service
▸ Si el usuario cambia a otra app el servicio seguirá activo
hasta que se complete o el sistema lo finalice, por falta de
recursos.
ANDROID 92
INICIAR/PARAR UN SERVICIO DESDE OTRO COMPONENTE
▸ Iniciar
startService(new Intent(this, [Link]));
▸ Parar
stopService(new Intent(this, [Link]));
ANDROID 93
TIPOS DE SERVICIOS
▸ 2 Tipos:
Started Service
Bound Service
ANDROID 94
STARTED SERVICE
▸ Se inicia explícitamente a través del método startService()
▸ Realiza una operación determinada y se cierra al momento
de finalizarla
ANDROID 95
BOUND SERVICE. (SERVICIO LIGADO)
▸ Se liga a un componente con el método bindService()
▸ La vida de un bound service depende de la vida del
elemento que lo ató.
▸ Puede comunicarse directamente con el componente al
que está ligado para compartir datos estructurados,
realizar operaciones en conjunto y gran variedad de
interacciones posibles
ANDROID 96
CICLO DE VIDA
ANDROID 97
MÉTODOS DE SERVICE
▸ onCreate(): Se ejecuta cuando el servicio está creado en memoria. Si el
servicio ya está activo, entonces se evita de nuevo su llamada.
▸ onStartCommand(): Se ejecuta las instrucciones del servicio. Se llama solo
si el servicio se inició con startService().
▸ onBind(): Solo se ejecuta si el servicio fue ligado con bindService() por un
componente. Retorna una interfaz Java de comunicación del tipo IBinder.
Este método siempre debe llamarse, incluso dentro de los started services,
los cuales retornan null.
▸ onDestroy(): Se llama cuando el servicio está siendo
destruido. Importantísimo que dentro de este método detengas los hilos
iniciados.
ANDROID 98
INTENTSERVICE
99
MÓDULO 5
VISTAS, WIDGETS Y ESTILOS
MÓDULO 5 100
WIDGET
▸ Son Vistas especializadas colocadas
en los archivos de diseño, como
Button, TextView, CheckBox, etc
▸ El SDK de Android proporciona una
lista de widgets
▸ Podemos
▸ ampliar un widget existente para
personalizar su funcionalidad
▸ crear nuestro propio widget
desde cero
101
MÓDULO 7
INTENTS
MÓDULO 7 - INTENTS 102
ANDROID INTENTS
▸ Es algo que queremos hacer … una acción
MÓDULO 7 - INTENTS 103
INTENTS EXPLÍCITO
▸ Especificamos el nombre de la clase que queremos que
inicie Android.
▸ Por ejemplo: Abrir un Activity
Intent intent = new Intent([Link],
[Link]);
startActivity(intent);
MÓDULO 7 - INTENTS 104
INTENTS IMPLÍCITOS
▸ Indicamos al SO Android que es lo que queremos hacer
▸ El SO encuentra el activity que puede realizarlo.
▸ Por ejemplo: ¿Puedes enviar este mensaje?
Intent intent = new Intent(Intent.ACTION_VIEW,
[Link](“http:/[Link]/“)));
startActivity(intent);
Lo que estamos haciendo es decirle al sistema que queremos ver la pagina
“[Link] El sistema tomará la decisión de cual es la aplicación
más adecuada, que puede ser, el Browser del dispositivo o quizás otra aplicación
que el usuario tenga instalado.
MÓDULO 7 - INTENTS 105
INTENT IMPLÍCITO. ENVIAR UN MENSAJE POR MAIL
106
MÓDULO 8
APIS Y LIBRARIES
MÓDULO 8 - APIS Y LIBRERIAS 107
API
▸ API - Application Programming J
SERVICIOS DE
APLICACIÓN API BACKEND
JSON / XML
MÓDULO 8 - APIS Y LIBRERIAS 108
LIBRERÍAS
▸ Para usar las APIs remotas, es necesario entender muchas
cosas
▸ Si nosotros tuviéramos que desarrollar todo lo necesario
para hacer la tarea de llamar al servicio remoto, enviar
datos, etc, nos llevaría mucho tiempo
▸ Android nos da una serie de librerías para facilitar la tarea
MÓDULO 8 - APIS Y LIBRERIAS 109
LA LIBRERIA VOLLEY
▸ Librería de Android para hacer peticiones HTTP
▸ Creada por ingenieros de Google
MÓDULO 8 - APIS Y LIBRERIAS 110
LA LIBRERIA VOLLEY
▸ Configurar la librería Volley
[Link]
▸ Añadir dependencia en [Link]
dependencies {
...
implementation '[Link]:volley:1.1.1'
}
▸ Ya disponemos de la
clase Volley
MÓDULO 8 - APIS Y LIBRERIAS 111
JSON
▸ JSON: JavaScript Object Notation.
▸ JSON es una sintaxis para almacenar e intercambiar datos
▸ syntax for storing and exchanging data.
▸ JSON es texto , se escribe con notación JavaScript object
MÓDULO 8 - APIS Y LIBRERIAS 112
JSON - INTERCAMBIO DE DATOS
▸ JSON (JavaScript Object Notation)
▸ Formato para el intercambios de datos, básicamente JSON
describe los datos con una sintaxis dedicada que se usa para
identificar y gestionar los datos. Nació como una alternativa a
XML y, una de las mayores ventajas que tiene su uso es que puede
ser leído por cualquier lenguaje de programación. Por lo tanto,
puede ser usado para el intercambio de información entre distintas
tecnologías. Además debido a su naturaleza y al ser más compacto
suele ser mucho más rápido trabajar con JSON antes que con XML.
▸