Implementación de servicios normales en Android
Clase 30 de 33 • Curso de Android: Integración de APIs nativas
Contenido del curso
- 7

Emisión controlada de tiempo con Kotlin Flows
12:55 - 8

Simulación de ubicación GPS en emulador y dispositivo Android
05:48 - 9

Modelos de localización personalizados con Clean Architecture en Kotlin
08:36 - 10

Mapeo de datos de localización en Android con Kotlin
14:51 - 11

Inyección de dependencias para observar localización en Android
06:33 - 12

StateFlow para controlar localización en aplicaciones Android
08:47 - 13

State Flows para controlar localización y tiempo en Kotlin
10:00 - 14

Configuración y pruebas de Location Tracker en Android
09:37 quiz de Servicios de Localización
- 15

Integración de ubicación actual en mapas interactivos
06:46 - 16

Creación de polilíneas con datos reales en mapas de Android
04:07 - 17

Integración de intents y estados en pantalla mapa con Compose
08:05 - 18

Implementación del ViewModel para rastreo de localización en Android
14:29 quiz de Integración Maps con Localización
- 19

Gestión de permisos en tiempo de ejecución para aplicaciones Android
08:34 - 20

Creación de diálogos de permisos reutilizables en Android
06:55 - 21

Gestión de permisos de localización y notificaciones en Android
10:18 - 22

Implementación de solicitud de permisos con LaunchedEffect en Compose
09:53 quiz de Manejo de permisos
- 23

Implementación de PhotoHandler para gestión de cámara en Android
11:59 - 24

Conversión de Bitmaps a Byte Arrays con Extension Functions
05:58 - 25

Definición de Intents y estados de UI para cámara en Kotlin
08:41 - 26

Configuración de métodos del ViewModel para gestión de cámara
09:41 - 27

Integración de CameraX con Jetpack Compose en Android
14:23 - 28

Creación de pantalla de previsualización de fotos con Jetpack Compose
08:44 - 29

Integración de galería fotográfica en mapas con Jetpack Compose
11:56 quiz de Integración cámara
¿Quieres aprender cómo funcionan los servicios en Android y cómo mantener tareas activas aún con la aplicación cerrada? En Android existen componentes clave que permiten ejecutar tareas en segundo plano denominados servicios. A continuación veremos cómo implementarlos paso a paso, desde los servicios simples hasta los foreground services.
¿Qué son los servicios en Android y para qué sirven?
Los servicios en Android realizan acciones sin necesidad de una interfaz gráfica. Existen dos tipos principales de servicios:
- Servicios normales: ejecutan tareas en segundo plano sin garantizar persistencia cuando la aplicación es cerrada por el sistema operativo.
- Foreground services: tienen prioridad alta y persisten aún con la aplicación cerrada, siempre y cuando muestren una notificación.
¿Cómo implementar un servicio normal en Android utilizando código?
Para iniciar, nos posicionamos en el proyecto TrackIt y realizamos los siguientes pasos:
- Creamos una nueva clase, por ejemplo,
TrackItService, que extienda la claseService. - Añadimos anotación para facilitar inyección de dependencias:
@AndroidEntryPoint. - Implementamos
onBind()y lo dejamos en retorno nulo (null). - Añadimos un
CoroutineScopea nuestro servicio:
private var serviceScope = CoroutineScope(Dispatchers.Main + SupervisorJob())
- Sobreescribimos el método
onStartCommand()y creamos internamente métodos comostart()ystop()para iniciar y detener la tarea que queremos ejecutar en segundo plano. - Creamos un objeto compañero con constantes que indiquen comandos como
ACTION_STARTyACTION_STOP.
¿Cómo controlar el estado del servicio y registrarlo en el manifiesto?
- Usamos una variable interna tipo
StateFlowpara consultar fácilmente desde componentes externos si el servicio está activo:
private val _serviceActive = MutableStateFlow(false)
val serviceActive = _serviceActive.asStateFlow()
- Registramos el servicio en AndroidManifest.xml:
<service android:name=".TrackItService"/>
¿Cómo interactuar con el servicio desde una Activity?
Utilizamos un Intent con un action desde nuestra actividad para iniciar o detener el servicio:
val intent = Intent(context, TrackItService::class.java).apply {
action = TrackItService.ACTION_START
}
- Implementamos desde composables, activities o efectos callbacks que envíen estos mensajes claramente según la interacción del usuario.
¿Cuál es la diferencia entre servicios normales y foreground services en la gestión del sistema?
Servicios normales no aseguran persistencia; el sistema operativo puede terminar la tarea si requiere liberar recursos. Por el contrario, foreground services sí aseguran persistencia mostrando una notificación visible para el usuario, aumentando así su prioridad en el sistema.
¿Te interesa conocer detalles adicionales sobre implementar foreground services para garantizar tareas permanentes? ¡Cuéntanos tus dudas en los comentarios!