Agustín Ventura

Ingeniería de Software

Emulador de Android en Ubuntu (Initializing hardware OpenGLES emulation support)

A veces (normalmente en una instalación nueva), los emuladores de Android no arrancan en Ubuntu de 64 bits debido a un error con OpenGLES. Para comprobar si la solución es aplicable, hay que ejecutar este comando desde la consola: $ ./emulator -avd GalaxyS -verbose Donde GalaxyS será el nombre del avd que se desee arrancar, al final del log deberemos ver algo así: emulator: Initializing hardware OpenGLES emulation support Violación de segmento (`core' generado) El problema y su solución se encuentra reportado aquí.

CrankPlay, lógica propia

Vale, una vez terminado el guarreo con el ciclo de vida, toca implementar la lógica de negocio propia de la aplicación. Al ser JustPlay un reproductor de mp3 y ogg, vamos a ver que lógica tenemos que implementar: Funcionalidad Detallada Gestión de la lista de reproducción, añadir directorios y canciones sueltas, borrar la lista de reproducción, eliminar canciones en particular y reordenarla mediante drag&drop. Reproducir: Reproducir toda la playlist desde el principio hasta el final dándole al botón de play. Reproducir una canción: Empezar a reproducir toda la playlist desde la canción seleccionada. Parar: Parar la reproducción, al darle a play se volverá a reproducir la lista desde el principio. Pausar: Parar la reproducción, al darle a play se continuará con la reproducción donde estaba. Canción anterior: Reproducir la canción anterior, en caso de ser la primera se reproducirá desde el principio. Canción siguiente: Reproducir la canción siguiente, en caso de ser la última no se hará nada. Avance rápido: Avanzar 15 sgs en la canción. Si la posición actual de la canción + 15 sgs > longitud de la canción, se pasa a la siguiente canción. Retroceso: Retroceder 15 sgs en la canción. Si la posición actual de la canción - 15 sgs < 0, se comienza desde el principio. Definición de Responsabilidades Entre los artefactos existentes voy a dividir la responsabilidad de la siguiente manera:

CrankPlay, binding al servicio

El siguiente paso en el desarrollo de JustPlay resulta bastante obvio, ligar el MediaPlayer con el MediaService, o lo que es lo mismo, hacer un bind. Para no perderme, he hecho un pequeño diagrama de interacción entre MediaPlayer y MediaService. En él se aprecia que aparte de los métodos de negocio necesarios (denotados por una línea discontínua), todavía me faltan por implementar dos métodos del ciclo de vida: el bind y el unbind, que son precisamente los que me permiten establecer una comunicación bidireccional con el MediaService para indicar acciones y realizar y obtener resultados.

JustPlay, explorador de archivos

Uno de mis requisitos en JustPlay (de hecho, el fundamental), es poder reproducir a partir de archivos sueltos o directorios. Por tanto, necesitaré un explorador de archivos, aunque sea muy básico, que permita ver los archivos en la memoria del dispositivo y añadirlos a una lista de reproducción. Gráficamente, la interacción entre las actividades sería así. En general la devolución del parámetro no tendrá mayor problema, ya que se puede hacer a través del intent de vuelta.

CrankPlay, arquitectura

Bueno, ya va siendo hora de empezar el trabajo en JustPlay. Después de mucho documentarme sobre Activities, Services y Threads, creo que tengo una aproximación bastante buena a la arquitectura que voy a intentar implementar. Introducción Un requisito fundamental es que la aplicación consuma los mínimos recursos posibles, con lo cual cabría pensar que se puede implementar mediante una Activity normal y corriente. Esto es un error, una Activity tiene un ciclo de vida determinado y cabe suponer (aunque no he hecho la prueba) que en cuanto pasara al estado “Paused”, se terminaría la reproducción de música.