Antes de marcar este post como "duplicado", estou escrevendo este post porque nenhum outro post contém a solução para o problema.
Estou tentando desligar o dispositivo e, após alguns minutos ou troca de sensor, ligue-o novamente.
Desligue os testes de exibição
Consigo desligar a tela usando:
params.flags |= LayoutParams.FLAG_KEEP_SCREEN_ON;
params.screenBrightness = 0;
getWindow().setAttributes(params);
Não consigo desligar a tela usando o método wl.release ().
Ativar teste de exibição
Meu primeiro palpite, como segue, não funciona. Nada acontece, a tela permanece desligada.
params.flags |= LayoutParams.FLAG_KEEP_SCREEN_ON;
params.screenBrightness = -1f;
getWindow().setAttributes(params);
Também tentei usar wakelocks, sem sucesso.
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "tag");
wl.acquire();
Finalmente tentei o seguinte, sem resultado.
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
Resumindo, não recebo nenhum tipo de erro no console para nenhum desses métodos. Meu texto de teste "A tela deve estar ligada" aparece na tela quando ligo o dispositivo usando o botão liga / desliga. Isso mostra que o código deveria ter sido executado. Por favor, responda somente se você testou o código, parece que muitas das funções, como params.screenBrightness = -1
, não funcionam como deveriam de acordo com o SDK.
Respostas:
Vou presumir que você só deseja que isso entre em vigor enquanto seu aplicativo estiver em primeiro plano.
Este código:
Não desliga a tela no sentido tradicional. Isso torna a tela o mais escura possível. Na plataforma padrão, há um limite para a intensidade da luz; se o seu dispositivo está realmente permitindo que a tela desligue completamente, então é alguma peculiaridade da implementação desse dispositivo e não um comportamento com o qual você pode contar em todos os dispositivos.
Na verdade, usar isso em conjunto com FLAG_KEEP_SCREEN_ON significa que você nunca permitirá que a tela se apague (e, portanto, o dispositivo entre no modo de baixo consumo de energia), mesmo se o dispositivo específico estiver permitindo que você defina o brilho da tela para totalmente desligado. Tenha isso em mente. Você usará muito mais energia do que se a tela estivesse realmente desligada.
Agora, para retornar a tela ao brilho normal, basta definir o valor do brilho:
Não consigo explicar por que isso não substituiria o valor 0 que você definiu anteriormente. Como teste, você pode tentar colocar um brilho total forçado ali para forçar esse brilho específico:
Isso definitivamente funciona. Por exemplo, os aplicativos de livros do Google usam isso para permitir que você defina o brilho da tela para diminuir ao usar um livro e, em seguida, retornar ao brilho normal ao desligar.
Para ajudar a depurar, você pode usar "adb shell dumpsys window" para ver o estado atual de sua janela. Nos dados de sua janela, ele informará os LayoutParams atuais que foram definidos para ela. Certifique-se de que o valor que você acha que está realmente lá.
E, novamente, FLAG_KEEP_SCREEN_ON é um conceito separado; ele e o brilho não têm impacto direto um no outro. (E não haveria razão para definir o sinalizador novamente ao desfazer o brilho, se você já o tivesse definido ao colocar o brilho em 0. O sinalizador permanecerá definido até que você o altere.)
fonte
Eu escrevi esse método para ligar a tela após o bloqueio da tela. Funciona perfeitamente para mim. Tente-
E chame esse método de
onResume()
.fonte
Eu sugeriria este:
A sinalização ACQUIRE_CAUSES_WAKEUP é explicada assim:
Além disso, certifique-se de ter a seguinte permissão no arquivo AndroidManifewst.xml:
fonte
Olá, espero que ajude:
fonte
PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK
que só desliga a tela quando o sensor de proximidade está no estado "próximo".PROXIMITY_SCREEN_OFF_WAKE_LOCK
waitlock, a tela voltará. Como faço para evitar isso?// Arquivo de manifesto do usuário
fonte
Tem certeza de que solicitou a permissão adequada em seu arquivo de manifesto?
Você pode usar o AlarmManager 1 classe para disparar um intent que inicia sua atividade e adquire o wake lock. Isso ligará a tela e a manterá ligada. Liberar o wakelock permitirá que o dispositivo entre no modo de espera por conta própria.
Você também pode dar uma olhada em usar o PowerManager para configurar o dispositivo para hibernar: http://developer.android.com/reference/android/os/PowerManager.html#goToSleep(long)
fonte
A melhor maneira de fazer isso (usando dispositivos com acesso root):
Agora temos essas duas funções:
E isto:
Desculpe pelo meu péssimo inglês.
fonte
Aqui está um exemplo bem-sucedido de uma implementação da mesma coisa, em um dispositivo que suportava valores de brilho de tela mais baixos (testei em um tablet Allwinner chinês 7 "executando API15).
Se alguém tentar fazer isso, por favor, comente abaixo se funcionou / não funcionou e o dispositivo, API Android.
fonte
Para manter a tela ligada:
Voltar ao modo padrão da tela: basta limpar o sinalizador FLAG_KEEP_SCREEN_ON
fonte
Isso é trabalhado em Marshmallow
fonte
Com relação à documentação do Android, isso pode ser obtido usando a seguinte linha de código:
Eu adicionei isso no meu
onCreate
método e funciona bem.No link, você encontrará diferentes maneiras de fazer isso e também uma explicação geral.
Link para a documentação: https://developer.android.com/training/scheduling/wakelock.html
fonte
Se seu aplicativo for um aplicativo de sistema, você pode usar PowerManager.goToSleep () para desligar a tela, você requer uma permissão especial
antes de usar goToSleep (), você precisa usar reflexão, assim como:
Agora, você pode usar goToSleep () para desligar a tela.
fonte
Basta adicionar
ou chamar
na visão dos pais.
fonte
Eu não teria esperança de "acordar a tela" na atividade. Se a tela estiver desligada, a atividade provavelmente está em um estado de pausa e não deve estar executando nenhum código.
Ao acordar, surge a questão da tela de bloqueio. Não sei como qualquer aplicativo pode ignorar automaticamente a tela de bloqueio.
Você deve considerar a execução de suas tarefas em segundo plano em um serviço e, em seguida, usar o gerenciador de notificações para enviar uma notificação quando o que for detectado. A notificação deve fornecer algum tipo de alerta do dispositivo (tela de ativação, ícone de notificação, led de notificação, etc). Ao clicar na notificação, ele pode lançar a intenção de iniciar sua atividade.
Você também pode tentar iniciar a atividade direto do serviço, mas realmente não sei se isso ligará a tela ou ignorará a tela de bloqueio.
fonte
De acordo com a API 28 do Android e acima, você precisa fazer o seguinte para ligar a tela
fonte
Eu tentei todas as soluções acima, mas nenhuma funcionou para mim. então pesquisei e encontrei as soluções abaixo. Eu tentei e funcionou.
https://www.tutorialspoint.com/how-to-turn-android-device-screen-on-and-off-programmatically
se houver alguma sugestão, por favor, dê
fonte