El sistema Android promueve la división de las aplicaciones de reproducción de audio en dos módulos bien diferenciados.
- Por una parte, tendríamos el módulo de control, que mediante algún tipo de interfaz gráfica permite al usuario lanzar comandos como play, pause, siguiente pista, pista anterior, etcétera.
- Por otro lado, tendríamos un servicio corriendo en background, responsable de reproducir cada pista de audio según las acciones que puedan llegarle desde el módulo control.
De este modo, tendríamos una arquitectura clásica cliente-servidor. En este caso, la parte de control e interfaz gráfica sería el cliente, el servidor sería puramente el reproductor de audio.
Además, con el uso de algunas clases de Android podríamos conseguir que el sistema funcionase con más de un cliente.
Imaginemos que no solo deseamos controlar la pista actual que se está reproduciendo en el servidor mediante los controles de nuestra app, sino que, además, deseamos permitir que otra app instalada en un smartwatch pueda controlar el servidor. El sistema Android nos facilita el trabajo mediante el uso de las clases MediaBrowser y MediaBrowserService. Si no necesitamos que otras aplicaciones o módulos de terceros accedan a nuestro sistema para reproducir audio, podríamos utilizar un servicio mucho más sencillo, heredando directamente de la clase Service.