Inicio > Android, Delphi, Ejemplos > Perfiles de audio (parte II)

Perfiles de audio (parte II)

miércoles, 20 de julio de 2016 Dejar un comentario Ir a comentarios

AudoioLevelsContinuando 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

audio_icon_29Si 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:

int FLAG_ALLOW_RINGER_MODES

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

path_fisico

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.

audio_settings

 

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:

menu_principal

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:

menus_app

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:

<CODIGO FUENTE DEL PROYECTO>

Un saludo y hasta la próxima.

Vota este post
Categories: Android, Delphi, Ejemplos Tags:
  1. Sin comentarios aún.
  1. Sin trackbacks aún.