Perfiles de audio (parte II)
Continuando con la entrada anterior del blog, donde hablaba de cómo acceder a las propiedades de audio de un dispositivo Android; La idea de esta entrada es avanzar un poco más en el tema y generar una aplicación que nos permita gestionar varios perfiles de audio en nuestro dispositivo.
Una vez que vimos cómo acceder a la información del volumen actual, lo siguiente que nos interesa es poder almacenar diferentes perfiles, de forma que podamos seleccionar uno de los perfiles y configurar todos los parámetros de audio de forma rápida y automática.
Además debemos poder editar los perfiles existentes, borrar os que no nos interesen y tener la posibilidad de crear nuevos.
Contaremos con una serie de perfiles predefinidos, que podrían ser similares a estos:
- Normal (Volúmenes al 100%)
- Bajo (Volúmenes al 20%)
- Sólo llamadas (todo al 0% excepto las llamadas)
- Silencio total (Todo al 0%)
PROCEDIMIENTO PARA MODIFICAR EL VOLUMEN
Si las funciones que tenemos disponibles para obtener el volumen de una determinada característica veíamos que son estas:
Para modificar el volumen de una de estas características contamos de forma análoga con el método:
Si miramos la definición del método en la unit AndroidAPI.JNI.Media, podemos ver lo siguiente:
JAudioManager = interface(JObject) ... procedure setStreamVolume(streamType: Integer; index: Integer; flags: Integer); cdecl; ... end; |
Vemos que de forma similar a getStreamVolume, el procedimiento setStreamVolume admite un primer parámetro para el Stream (característica):
int STREAM_ALARM: The audio stream for alarms int STREAM_DTMF: The audio stream for DTMF Tones int STREAM_MUSIC: The audio stream for music playback int STREAM_NOTIFICATION: The audio stream for notifications int STREAM_RING: The audio stream for the phone ring int STREAM_SYSTEM: The audio stream for system sounds int STREAM_VOICE_CALL: The audio stream for phone calls |
Un segundo parámetro para fijar el nivel de volumen, teniendo en cuenta que el máximo no es el 100% (como se podría pensar en un principio), sino que debemos obtenerlo con el método getStreammaxVolume.
Y el tercero, nos permite aplicar algunos flags, que modifican el comportamiento del método.
Si miramos en la unit AndroidAPI,JNI.Media, podremos encontrar las siguientes propiedades:
property FLAG_ALLOW_RINGER_MODES: Integer …; property FLAG_PLAY_SOUND: Integer …; property FLAG_REMOVE_SOUND_AND_VIBRATE: Integer …; property FLAG_SHOW_UI: Integer …; property FLAG_VIBRATE: Integer …; |
Que equivalen a los que se especifican en la documentación de Android:
Whether to include ringer modes as possible options when changing volume.
int
FLAG_PLAY_SOUND
Whether to play a sound when changing the volume.
int
FLAG_REMOVE_SOUND_AND_VIBRATE
Removes any sounds/vibrate that may be in the queue, or are playing (related to changing volume).
int
FLAG_SHOW_UI
Show a toast containing the current volume.
int
FLAG_VIBRATE
Whether to vibrate if going into the vibrate ringer mode.
PERFILES
Para almacenar los diferentes perfiles utilizaremos un fichero de texto (INI). La ubicación para almacenarlo será la siguiente:
TPath.GetSharedDocumentsPath |
Para los diferentes sistemas la ubicación “física” del fichero
No es la única ubicación posible. Podemos seleccionar otras que se definen dentro de la clase TPath.
Aquí se puede ver una descripción de cada una de las ubicaciones que nos ofrece esta clase y su ubicación física en las diferentes plataformas.
PERMISOS NECESARIOS
Será necesario modificar los permisos por defecto de la aplicación para que ésta pueda leer los valores del volumen actual y modificar los diferentes valores de cada Stream.
Si lo hacemos desde el fichero XML de manifest, deberemos asegurarnos de que la siguiente línea está presenta:
<uses-permission android:name=»android.permission.MODIFY_AUDIO_SETTINGS» />
Si lo hacemos desde la configuración, deberemos marcar la casilla para este permiso.
LA APLICACIÓN
Una vez con todo esto y lo visto en la entrada anterior, ya podemos “crear” nuestra aplicación para gestionar los “Perfiles de Audio”.
El menú principal nos muestra las siguientes opciones:
Inicialmente lo que haremos será proporcionar unos perfiles “Predefinidos”.
Tendremos la posibilidad de añadir un nuevo perfil o de modificar uno de los existentes:
Y a continuación os muestro un vídeo con la aplicación funcionando.
Podéis descargar el código completo del proyecto en el siguiente link:
Un saludo y hasta la próxima.
Embarcadero MVP.
Analista y Programador de Sistemas Informáticos.
Estudios de Informática (Ingeniería Técnica Superior) en la UPC (Universidad Politécnica de Barcelona).
Llevo utilizando Delphi desde su versión 3. Especialista en diseño de componentes, Bases de Datos, Frameworks de Persistencia, Integración Continua, Desarrollo móvil,…