Como desativar automaticamente o aviso de alto volume sem raiz

Aqueles de vocês que vivem em um dos países membros da União Européia provavelmente já se depararam com esse aviso ao tentar aumentar o volume do fone de ouvido, como mostra a imagem acima.

De acordo com os regulamentos estabelecidos pelo Comitê Europeu de Padronização Eletrotécnica (CENELEC), todos os dispositivos eletrônicos capazes de reproduzir mídia vendidos após fevereiro de 2013 devem ter um nível de volume de saída padrão de no máximo 85 dB. Os usuários podem optar por substituir o aviso para aumentar o volume para um máximo de 100 dB, mas, ao fazê-lo, o aviso deve aparecer novamente após 20 horas de reprodução de música.

Embora não possamos entrar em um debate sobre a eficácia desse regulamento na promoção da boa saúde, os usuários que frequentemente escolhem ignorar esse aviso geralmente se perguntam se esse processo pode ser automatizado. Há muitos casos em que é bastante irritante ter que concordar manualmente em substituir o limite de volume, como quando você inicia a reprodução de música remotamente em um dispositivo Bluetooth, então queríamos descobrir uma maneira de ignorar automaticamente esse aviso.

As soluções para contornar o "limite de volume seguro" já existem se você pesquisar em nossos fóruns, mas até agora todas as soluções exigiram a instalação de um módulo Xposed. Isso necessariamente limita quem pode usá-lo, já que o Xposed Framework exige que você tenha acesso root (o que significa um gerenciador de inicialização desbloqueado na maioria dos telefones), além de estar nas versões pré-Nougat do Android. Mas, depois de pesquisar no AOSP e em várias configurações do sistema, descobri uma maneira de ignorar o alto volume / limite de áudio seguro em todos os dispositivos sem exigir root.

Ao seguir este guia, você aceita os riscos envolvidos na escuta da mídia em altos níveis de volume.


Tutorial de desvio de aviso de áudio seguro

Se você leu meu artigo anterior sobre como ativar o Modo Imersivo sem acesso root, pode ter começado a brincar com algumas das configurações que pode encontrar ocultas no seu telefone. Se você não tiver, eu recomendo, pois descobri que quase todos os dispositivos têm uma tonelada de guloseimas esperando para serem descobertas. Esse truque não é diferente, pois usaremos uma propriedade do sistema para ignorar o aviso de áudio seguro.

Especificamente, modificaremos a propriedade System.Global audio_safe_volume_state na inicialização e periodicamente, para que o Android sempre pense que você consentiu em ignorar o aviso. Essa propriedade é definida no AOSP, que estamos reproduzindo abaixo. Existem vários estados que essa propriedade pode assumir, variando de 0 a 3. 30 segundos após a inicialização ou a cada 20 horas de reprodução contínua de música, o estado é definido como '0' ou 'não configurado'. Em seguida, é definido como '1' para 'desativado' ou '3' para 'ativado', dependendo do seu código de país para celular. Se você mora na UE, essa propriedade é definida como '3' por padrão, mas é alterada para '2' para 'inativo' sempre que o usuário ignora manualmente o aviso de volume. Alteraremos o valor dessa propriedade para o estado 'inativo' (alterá-lo para 'desativado' nunca funcionou para mim, caso você esteja se perguntando).

Implementação segura de volume de mídia no 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 

Primeiro você precisará instalar o Tasker e o AutoTools para que possamos automatizar esse truque. Tecnicamente, qualquer outro aplicativo de automação além do Tasker pode ser usado, mas eu só conheço o Tasker, então você terá que fazer ajustes por conta própria, se preferir usar um aplicativo diferente. O AutoTools, no entanto, é fundamental para esse truque, pois esse plug-in nos permitirá controlar as Configurações seguras em nosso dispositivo.

Conforme explicado no meu artigo sobre alternar o modo imersivo, precisamos conceder a permissão WRITE_SECURE_SETTINGS ao AutoTools. Isso ocorre porque o comando para controlar o estado do volume de áudio seguro é definido na classe Settings.Global, embora a sintaxe exata do comando esteja oculta no AOSP (como no Modo Imersivo). Se você já concedeu a permissão WRITE_SECURE_SETTINGS ao AutoTools depois de ler meu tutorial anterior no Modo Imersivo, poderá pular a próxima seção. Caso contrário, você precisará configurá-lo.


Concedendo permissão de configurações seguras ao AutoTools

No sistema de gerenciamento de permissões do Android, os aplicativos definem as permissões que eles desejam receber no arquivo Manifest. Os usuários podem conceder ou negar permissões na instalação (pré-Marshmallow) ou sob demanda (Marshmallow +). No entanto, existem certas permissões que os aplicativos não podem ser concedidos, mesmo que solicitem no manifesto, como WRITE_SECURE_SETTINGS. Isso ocorre porque conceder a qualquer aplicativo uma permissão tão poderosa quanto isso daria a esse aplicativo uma tonelada de controle sobre seu dispositivo.

Mas há uma solução alternativa que podemos usar para conceder a permissão WRITE_SECURE_SETTINGS a qualquer aplicativo que desejar. Usando a ferramenta gerenciador de pacotes (pm) do ADB, podemos conceder qualquer permissão a qualquer aplicativo que desejamos (desde que o aplicativo solicite essa permissão no arquivo Manifest).

A primeira coisa que você precisa fazer é instalar o binário ADB no seu computador, seguido pelo driver certo para o seu dispositivo. Em seguida, ative a Depuração USB nas Opções do desenvolvedor (vá para Configurações -> Sobre o telefone e toque em Criar número 7 vezes, se ainda não o tiver) e conecte seu telefone ao computador. Por fim, envie o seguinte comando depois de abrir um terminal:

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

Agora, o AutoTools poderá alterar qualquer configuração Global, Segura ou do Sistema no seu dispositivo. Existem várias maneiras de você brincar com essas configurações, e a lista de configurações disponíveis em cada categoria depende completamente da criação do seu dispositivo e software, mas essa discussão é para outro momento. De qualquer forma, mostraremos como usar o AutoTools para controlar o estado do volume seguro.


Desativando o aviso de áudio seguro na inicialização

Aqui está a descrição do perfil para aqueles que estão familiarizados com o Tasker. Se você não estiver familiarizado com o Tasker, continue lendo para obter instruções passo a passo.

Desativar áudio seguro na inicialização

 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 ] 

Abra o Tasker para que possamos criar um novo perfil. No canto inferior direito, toque no ícone + para criar um novo perfil. Adicione um novo contexto de evento e vá para Tasker -> Monitor Start. Estamos usando esse contexto de evento que é acionado quando o Tasker é iniciado, em vez do contexto de evento que é ativado quando o telefone é inicializado porque o primeiro é muito mais confiável que o último.

De qualquer forma, pressione o botão Voltar, pois criaremos uma tarefa associada a este perfil. Nomeie a tarefa como qualquer coisa, pois não importa. Depois de entrar na tela de criação de tarefas, pressione o ícone + na parte inferior central da tela para criar uma nova ação. Para a primeira ação, vá para Tarefa -> Aguardar e espere 30 segundos. Isso é responsável pela regra "30 segundos após a inicialização" usada no Android para definir o estado do volume seguro.

Em seguida, crie uma nova ação e vá para Plugin -> AutoTools -> Configurações seguras. Pressione o lápis para abrir a tela de configuração do AutoTools. Vá para Configuração personalizada. Para o Tipo de configuração, insira Global . Para o Nome, digite audio_safe_volume_state. Para o Tipo de entrada, faça int. Para o valor, faça 2. Verifique se você colocou tudo corretamente, a configuração deve corresponder à captura de tela do meio abaixo. O comando deve ser enviado exatamente como eu escrevi ou não terá nenhum efeito.

Quando terminar, volte ao menu principal do Tasker, pois precisaremos criar outro perfil. O que acabamos de criar conta quando o estado de volume seguro é definido 30 segundos após a inicialização, mas para aqueles que quase nunca reinicializam seu dispositivo, criaremos outro perfil para definir periodicamente esse valor.


Desativar aviso de áudio seguro periodicamente

Aqui está a descrição do perfil para aqueles que estão familiarizados com o Tasker. Se você não estiver familiarizado com o Tasker, continue lendo para obter instruções passo a passo.

Desativar áudio seguro periodicamente

 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 ] 

Crie um novo perfil, desta vez com um contexto de horário . Infelizmente, eu não conheço nenhum método para obter o tempo cumulativo atual de reprodução de mídia sem raiz, então, em vez disso, definiremos periodicamente o estado do volume seguro como inativo uma vez a cada 24 horas (… não é como se vocês realmente escutassem 20 horas de música dentro de um período de 24 horas, certo?). De qualquer forma, a interface do Tasker para definir uma Tarefa periódica é meio terrível, mas o essencial é que você deseja definir o tempo "De" e "Para" para o mesmo tempo. Dessa forma, o Tasker o tratará como você deseja que a tarefa seja acionada apenas uma vez em um horário definido (eu o fiz 1 minuto antes da meia-noite).

Quanto à tarefa, basta copiar o que você fez para a ação nº 2 no perfil anterior. Não há nenhuma ação nova ou diferente nesse caso, pois tudo o que estamos fazendo é alterar o valor dessa propriedade de sistema global uma vez a cada 24 horas.

Agora que você configurou esses dois perfis, está pronto! Reinicie o telefone e agora você não deverá mais receber o aviso de "volume seguro" ao conectar os fones de ouvido.


Baixe e importe para Tasker

Como sempre, estamos fornecendo o arquivo XML dos scripts que você pode baixar e importar. Basta baixar os arquivos no link abaixo e salvá-lo em qualquer lugar do seu armazenamento interno. Abra o Tasker e desative o Modo Iniciante em Preferências. Em seguida, volte à tela principal e pressione e segure a guia “Perfil” na parte superior. Você deve ver um pop-up com uma das opções sendo "Importar". Toque nele e navegue até onde você salvou os arquivos .prf.xml e selecione o arquivo a ser importado. Repita o procedimento para o segundo perfil.

Baixe o perfil 'Desativar aviso de áudio seguro na inicialização' Baixe o perfil 'Desativar aviso de áudio seguro periodicamente'

Esperamos que você ache útil essa dica. Deixe-nos saber nos comentários abaixo se isso funciona para você!