Cómo deshabilitar automáticamente la advertencia de alto volumen sin raíz

Aquellos de ustedes que viven en una de las naciones miembros de la Unión Europea probablemente se han topado con la advertencia cuando intentan subir el volumen de sus auriculares, como se muestra en la imagen de arriba.

De acuerdo con las regulaciones establecidas por el Comité Europeo de Estandarización Electrotécnica (CENELEC), todos los dispositivos electrónicos capaces de reproducir medios vendidos después de febrero de 2013 deben tener un nivel de volumen de salida predeterminado de un máximo de 85 dB. Los usuarios pueden optar por anular la advertencia para aumentar el volumen a un máximo de 100 dB, pero al hacerlo, la advertencia debe reaparecer después de 20 horas de reproducción de música.

Si bien no vamos a entrar en un debate sobre la eficacia de esta regulación para promover la buena salud, los usuarios que con frecuencia eligen evitar esta advertencia a menudo se preguntan si este proceso puede automatizarse. Hay muchos casos en los que es bastante molesto tener que aceptar manualmente anular el límite de volumen, como cuando inicia la reproducción de música de forma remota en un dispositivo Bluetooth, por lo que queríamos encontrar una manera de evitar esta advertencia automáticamente.

Ya existen soluciones para evitar el "límite de volumen seguro" si busca en nuestros foros, pero hasta ahora todas las soluciones han requerido que instale un Módulo Xposed. Esto necesariamente limita quién puede usarlo, ya que Xposed Framework requiere que tengas acceso de root (lo que significa un gestor de arranque desbloqueado en la mayoría de los teléfonos), así como estar en versiones de Android anteriores al turrón. Pero después de profundizar en AOSP y varias configuraciones del sistema, descubrí una forma de evitar el límite de volumen alto / audio seguro en todos los dispositivos sin requerir root.

Al seguir esta guía, acepta todos los riesgos relacionados con la escucha de medios a altos niveles de volumen.


Tutorial de derivación de advertencia de audio seguro

Si ha leído mi artículo anterior sobre cómo habilitar el modo inmersivo sin acceso a la raíz, entonces puede haber comenzado a jugar con algunas de las configuraciones que puede encontrar ocultas en su teléfono. Si no lo ha hecho, le recomiendo que lo haga, ya que descubrí que casi todos los dispositivos tienen un montón de cosas que esperan ser descubiertas. Este truco no es diferente, ya que utilizaremos una propiedad del sistema para evitar la advertencia de audio segura.

Específicamente, modificaremos la propiedad System.Global audio_safe_volume_state tanto en el arranque como periódicamente para que Android siempre piense que ha consentido omitir la advertencia. Esta propiedad se define en AOSP, que reproducimos a continuación. Hay varios estados que esta propiedad puede tomar, que van desde 0-3. 30 segundos después del arranque o después de cada 20 horas de reproducción continua de música, el estado se establece en '0' o 'no configurado'. Luego se establece en '1' para 'deshabilitado' o '3' para 'habilitado' dependiendo de su código de país móvil. Si vive en la UE, esta propiedad se establece en '3' de forma predeterminada, pero se cambia a '2' para 'inactiva' siempre que el usuario omita manualmente la advertencia de volumen. Cambiaremos el valor de esta propiedad al estado 'inactivo' (cambiarlo a 'deshabilitado' nunca funcionó para mí, en caso de que se lo pregunte).

Implementación segura de volumen de medios en AOSP

  //========================================================================================== // Safe media volume management. // MUSIC stream volume level is limited when headphones are connected according to safety // regulation. When the user attempts to raise the volume above the limit, a warning is // displayed and the user has to acknowlegde before the volume is actually changed. // The volume index corresponding to the limit is stored in config_safe_media_volume_index // property. Platforms with a different limit must set this property accordingly in their // overlay. //========================================================================================== // mSafeMediaVolumeState indicates whether the media volume is limited over headphones. // It is SAFE_MEDIA_VOLUME_NOT_CONFIGURED at boot time until a network service is connected // or the configure time is elapsed. It is then set to SAFE_MEDIA_VOLUME_ACTIVE or // SAFE_MEDIA_VOLUME_DISABLED according to country option. If not SAFE_MEDIA_VOLUME_DISABLED, it // can be set to SAFE_MEDIA_VOLUME_INACTIVE by calling AudioService.disableSafeMediaVolume() // (when user opts out). private final int SAFE_MEDIA_VOLUME_NOT_CONFIGURED = 0; private final int SAFE_MEDIA_VOLUME_DISABLED = 1; private final int SAFE_MEDIA_VOLUME_INACTIVE = 2; private final int SAFE_MEDIA_VOLUME_ACTIVE = 3; private Integer mSafeMediaVolumeState; private int mMcc = 0; // mSafeMediaVolumeIndex is the cached value of config_safe_media_volume_index property private int mSafeMediaVolumeIndex; // mSafeMediaVolumeDevices lists the devices for which safe media volume is enforced, private final int mSafeMediaVolumeDevices = AudioSystem.DEVICE_OUT_WIRED_HEADSET | AudioSystem.DEVICE_OUT_WIRED_HEADPHONE; // mMusicActiveMs is the cumulative time of music activity since safe volume was disabled. // When this time reaches UNSAFE_VOLUME_MUSIC_ACTIVE_MS_MAX, the safe media volume is re-enabled // automatically. mMusicActiveMs is rounded to a multiple of MUSIC_ACTIVE_POLL_PERIOD_MS. private int mMusicActiveMs; private static final int UNSAFE_VOLUME_MUSIC_ACTIVE_MS_MAX = (20 * 3600 * 1000); // 20 hours private static final int MUSIC_ACTIVE_POLL_PERIOD_MS = 60000; // 1 minute polling interval private static final int SAFE_VOLUME_CONFIGURE_TIMEOUT_MS = 30000; // 30s after boot completed 

Primero deberá instalar Tasker y AutoTools para que podamos automatizar este truco. Técnicamente, se puede usar cualquier otra aplicación de automatización aparte de Tasker, pero solo estoy familiarizado con Tasker, por lo que tendrá que hacer ajustes por su cuenta si prefiere usar una aplicación diferente. Sin embargo, AutoTools es fundamental para este truco, ya que este complemento nos permitirá controlar la Configuración segura en nuestro dispositivo.

Como se explica en mi artículo sobre alternar el modo inmersivo, debemos otorgar el permiso WRITE_SECURE_SETTINGS a AutoTools. Esto se debe a que el comando para controlar el estado de volumen de audio seguro se define en la clase Settings.Global, aunque la sintaxis exacta del comando está oculta en AOSP (al igual que para el modo inmersivo). Si ya ha otorgado el permiso WRITE_SECURE_SETTINGS a AutoTools después de haber leído mi tutorial anterior sobre el modo inmersivo, puede omitir la siguiente sección. Si no, entonces tendrás que configurarlo.


Conceder permiso de configuración segura a AutoTools

Bajo el sistema de administración de permisos de Android, las aplicaciones definen los permisos que desean que se otorguen en el archivo Manifiesto. Los usuarios pueden otorgar o denegar permisos de instalación (pre-Marshmallow) o bajo demanda (Marshmallow +). Sin embargo, hay ciertos permisos que las aplicaciones no pueden otorgarse incluso si lo solicitan en el Manifiesto, como WRITE_SECURE_SETTINGS. Esto se debe a que otorgar a cualquier aplicación un permiso tan poderoso como esto le daría a esa aplicación un montón de control sobre su dispositivo.

Pero hay una solución alternativa que podemos usar para otorgar el permiso WRITE_SECURE_SETTINGS a cualquier aplicación que queramos. Al usar la herramienta de administrador de paquetes (pm) de ADB, podemos otorgar cualquier permiso a cualquier aplicación que queramos (siempre que la aplicación solicite ese permiso en el archivo Manifiesto).

Lo primero que deberá hacer es instalar el binario ADB en su computadora, seguido del controlador adecuado para su dispositivo. Luego, habilite la depuración USB en las Opciones de desarrollador (vaya a Configuración -> Acerca del teléfono y toque el número de compilación 7 veces si aún no lo ha hecho) y conecte su teléfono a su computadora. Finalmente, envíe el siguiente comando una vez que haya abierto una terminal:

adb shell pm grant com.joaomgcd.autotools android.permission.WRITE_SECURE_SETTINGS

Ahora AutoTools tendrá la capacidad de cambiar cualquier configuración global, segura o del sistema en su dispositivo. Hay varias formas de jugar con estas configuraciones, y la lista de configuraciones disponibles en cada categoría depende completamente de la construcción de su dispositivo y software, pero esa discusión es para otro momento. En cualquier caso, continuaremos mostrándole cómo usar AutoTools para controlar el estado de volumen seguro.


Deshabilitar la Advertencia de audio segura en el arranque

Aquí está la descripción del perfil para aquellos de ustedes que están familiarizados con Tasker. Si no está familiarizado con Tasker, siga leyendo para obtener instrucciones paso a paso.

Deshabilitar audio seguro en el arranque

 Profile: Disable Safe Audio On Boot (6) Event: Monitor Start Enter: Anon (7) A1: Wait [ MS:0 Seconds:30 Minutes:0 Hours:0 Days:0 ] A2: AutoTools Secure Settings [ Configuration:Setting Type: Global Name: audio_safe_volume_state Input Type: Int Value: 2 Timeout (Seconds):60 ] 

Abre Tasker para que podamos crear un nuevo perfil. En la esquina inferior derecha, toque el ícono + para crear un nuevo perfil. Agregue un nuevo contexto de evento y vaya a Tasker -> Monitor Start. Estamos utilizando este contexto de evento que se activa cuando se inicia Tasker en lugar del contexto de evento que se activa cuando el teléfono se inicia porque el primero es mucho más confiable que el segundo.

En cualquier caso, presione el botón Atrás ya que ahora crearemos una Tarea asociada con este perfil. Asigne un nombre a la tarea, ya que no importa. Una vez que ingrese a la pantalla de creación de Tareas, presione el ícono + en la parte inferior central de la pantalla para crear una nueva Acción. Para la primera acción, vaya a Tarea -> Esperar y espere 30 segundos. Esto explica la regla de "30 segundos después del arranque" utilizada en Android para establecer el estado de volumen seguro.

A continuación, cree una nueva Acción y vaya a Complemento -> Herramientas automáticas -> Configuración segura. Presione el lápiz para abrir la pantalla de configuración de AutoTools. Vaya a Configuración personalizada. Para el Tipo de configuración, ingrese Global . Para el Nombre, ingrese audio_safe_volume_state. Para el tipo de entrada, int. Para el valor, hazlo 2. Comprueba para asegurarte de poner todo correctamente, la configuración debe coincidir con la captura de pantalla del medio a continuación. El comando debe enviarse exactamente como lo he escrito o no tendrá ningún efecto.

Una vez que haya terminado, vuelva al menú principal de Tasker, ya que necesitaremos crear otro perfil. El que acabamos de crear representa cuando el estado de volumen seguro se establece 30 segundos después del inicio, pero para aquellos de ustedes que casi nunca reinician su dispositivo, crearemos otro perfil para establecer periódicamente este valor.


Deshabilitar la advertencia de audio segura periódicamente

Aquí está la descripción del perfil para aquellos de ustedes que están familiarizados con Tasker. Si no está familiarizado con Tasker, siga leyendo para obtener instrucciones paso a paso.

Deshabilitar audio seguro periódicamente

 Profile: Disable Safe Audio Periodically (21) Time: 11:59PM Enter: Anon (122) A1: AutoTools Secure Settings [ Configuration:Setting Type: Global Name: audio_safe_volume_state Input Type: Int Value: 2 Timeout (Seconds):60 ] 

Cree un nuevo perfil, esta vez con un contexto de tiempo . Desafortunadamente, no conozco ningún método para obtener el tiempo acumulado actual de reproducción de medios sin root, por lo que solo estableceremos periódicamente el estado de volumen seguro en inactivo una vez cada 24 horas (... no es como si realmente escucharan 20 horas de música dentro de un período de 24 horas, ¿verdad?). De todos modos, la interfaz de Tasker para configurar una Tarea periódica es un poco terrible, pero lo esencial es que desea establecer el tiempo "Desde" y "Hasta" al mismo tiempo. De esta manera, Tasker lo tratará como si quisiera que la Tarea solo se activara una vez a una hora establecida (lo hice 1 minuto antes de la medianoche).

En cuanto a la Tarea, simplemente copie lo que hizo para la Acción # 2 en el perfil anterior. No hay una Acción nueva o diferente en este caso, ya que todo lo que estamos haciendo es cambiar el valor de esta propiedad del sistema Global una vez cada 24 horas.

Ahora que ha configurado ambos perfiles, ¡ya está! Reinicie su teléfono y ya no debería ver la advertencia de "volumen seguro" cuando conecte sus auriculares.


Descargar e importar a Tasker

Como siempre, proporcionamos el archivo XML de los scripts que puede descargar e importar. Simplemente descargue los archivos del enlace a continuación y guárdelos en cualquier lugar de su almacenamiento interno. Abra Tasker y desactive el Modo principiante en Preferencias. Luego, regrese a la pantalla principal y mantenga presionada la pestaña "Perfil" en la parte superior. Debería ver una ventana emergente con una de las opciones que es "Importar". Toque en eso y navegue hasta donde guardó los archivos .prf.xml y seleccione ese archivo para importar. Repita para el segundo perfil.

Descargue el perfil 'Desactivar advertencia de audio seguro en el arranque' Descargue el perfil 'Desactivar advertencia de audio seguro periódicamente'

Esperamos que encuentre útil este consejo. ¡Háganos saber en los comentarios a continuación si esto funciona para usted!