Ocultar notificação persistente para aplicativos e sobreposições em segundo plano no Android O

Tutorial sobre como ocultar a notificação persistente no Android O que mostra quando um aplicativo em segundo plano está em execução ou quando uma sobreposição está sendo exibida.

Atualização 25/08/17: Este tutorial agora está obsoleto, pois o Google corrigiu o método que estamos usando para ocultar a notificação persistente em segundo plano. No entanto, descobrimos outra solução alternativa para esse problema e escrevemos um breve tutorial sobre ela que você pode encontrar aqui.

O Android O pretende trazer melhorias importantes para o sistema operacional Android que todos conhecemos e amamos. Modo picture-in-picture para telefones, canais de notificação, seleção inteligente de texto, serviços de preenchimento automático e muitas, muitas mudanças ocultas para melhorar a vida útil da bateria, o desempenho e a segurança. Um recurso que deve ajudar os usuários a resolver problemas de duração e desempenho da bateria são as limitações do processo em segundo plano. Sem entrar em muitos detalhes, os aplicativos no Android O não podem mais ser ativados a partir de seus registros registrados no manifesto. receptores de transmissão implícitos e eles não podem mais iniciar serviços em segundo plano sem passar Agendador de tarefas. Se um aplicativo quiser iniciar um serviço em segundo plano, ele deverá informar explicitamente ao usuário que está fazendo isso, postando uma notificação. No entanto, quando um aplicativo está sendo executado em segundo plano, o Android O agora parece aderir 

outro notificação persistente informando quais aplicativos estão em execução. Isso também ocorre quando um aplicativo com o SYSTEM_ALERT_WINDOW permissão (como o popular Crepúsculo app) está exibindo uma sobreposição.

Notificação persistente do Android O para aplicativos em segundo plano e de sobreposição. Créditos: Ben Schoon \\ 9to5Google

Embora essas notificações sejam minimizadas por padrão, elas não podem ser dispensadas pelo usuário ou bloqueadas permanentemente nas Configurações. Esse comportamento é muito irritante para muitos usuários e espero seriamente que o Google nos dê uma maneira de desativar essa notificação na versão final do Android O/Android 8.0. No entanto, se não o fizerem, há é ainda é uma maneira de ocultar permanentemente a notificação persistente de aplicativos em segundo plano. Mostrarei como fazer isso em um guia passo a passo, seguido de uma explicação de como funciona, bem como de advertências importantes.


Requisitos:

  • AndroidO
  1. Instale os drivers USB para o seu telefone específico se você estiver no Windows (eles podem ser encontrados aqui).
  2. Faça o download do Binário ADB para o seu sistema operacional específico (janelas, Mac, Linux). Esses links sempre apontarão para a versão mais recente do binário, então você não precisa vasculhar a rede em busca da versão mais recente.
  3. Extraia o conteúdo do arquivo ZIP que você baixou para uma pasta de fácil acesso em seu PC (como a pasta Downloads).
  4. Vá para o aplicativo Configurações do seu telefone e toque na opção “Sobre o telefone”.
  5. Encontre o número da versão e toque nele 7 vezes para ativar o modo de desenvolvedor. Você verá um pop-up assim que estiver ativado.
  6. Volte ao menu principal Configurações e entre nas Opções do desenvolvedor para ativar o modo de depuração USB.
  7. Conecte seu telefone ao PC e deslize para baixo no painel de notificação para alterar o modo USB de “somente carga” para “transferência de arquivos (MTP)”. Isso pode não ser necessário para o seu telefone.
  8. No seu PC, navegue até o diretório onde você extraiu o binário ADB.
  9. Inicie um prompt de comando/terminal neste diretório ADB. Para usuários do Windows, isso pode ser feito pressionando Shift + clique com o botão direito e selecionando a opção “abrir prompt de comando aqui”.
  10. Quando estiver no ambiente de prompt de comando ou terminal, digite o seguinte comando: adb devices
  11. Isso iniciará o daemon ADB. Se esta for a primeira vez que você executa o ADB, você também verá um prompt em seu telefone solicitando que você autorize uma conexão.
  12. Agora execute novamente o comando adb devices da etapa 10 e o prompt de comando/terminal imprimirá o número de série do seu dispositivo. Se isso acontecer, você está pronto para seguir em frente. Caso contrário, os drivers USB provavelmente não estão instalados corretamente.
  13. Volte ao prompt de comando e digite o seguinte comando: adb shell
  14. Agora execute o seguinte comando: cmd appops set android POST_NOTIFICATION ignore
  15. Você não receberá uma mensagem de sucesso nem nada, mas contanto que não veja um erro, deveria ter funcionado. Agora é só reiniciar o seu telefone!

    Sim, sei que são imagens da tela de um telefone, e não capturas de tela. Eu não tenho um dispositivo compatível com Android O, então pedi ao TK que me enviasse imagens.

  16. Se você deseja reverter este comando, digite isto no prompt de comando: cmd appops set android POST_NOTIFICATION allow

Como funciona

Usando a interface de linha de comando oculta do App Ops, o sistema de gerenciamento de permissões voltado para o usuário do Android, podemos restringir a permissão POST_NOTIFICATION do pacote "android". (Observação: estamos configurando para "ignorar" em vez de "negar" porque "negar" pode causar alguns erros.) Encontrei essa permissão examinando o código-fonte relevante para AppOpsManager, que lista todas as permissões possíveis que podem ser concedidas/revogadas, muitas das quais não estão acessíveis nas configurações do Android. O pacote "android" na verdade se refere ao "Sistema Android", também conhecido como framework-res.apk, que é responsável pela notificação persistente da qual estamos tentando nos livrar.

Ao revogar essencialmente a permissão POST_NOTIFICATION do sistema Android, ele não poderá mais mostrar uma notificação! Parece muito simples, certo? Infelizmente, há uma advertência a ter em conta. O "Sistema Android" é responsável por mais do que apenas esta notificação, portanto, quaisquer outras notificações que ele possa postar não serão mais mostradas. Isso pode incluir a notificação do modo USB (que ainda pode ser alterada por meio da configuração nas Opções do desenvolvedor), bem como algumas outras coisas.

Embora esta seja uma medida bastante drástica de nossa parte, atualmente é a única maneira de ocultar esta notificação desde fazer root no seu telefone e modificar a própria estrutura, o que obviamente é algo que poucos usuários desejam ou são capazes pendência. Espero sinceramente que o Google ofereça uma maneira de ocultar essa notificação em uma versão futura do Android O ou, melhor ainda, de remover totalmente essa notificação. Compreensivelmente, o Google deseja melhorar a experiência do usuário, notificando-os quando um aplicativo está sendo executado em segundo plano. o usuário pode não estar ciente, mas o método que ele escolheu é irritante para aqueles de nós que sabem o que somos sobre cada aplicativo usando.