Isso requer que você dê ao seu aplicativo uma permissão adicional, e é muito fácil introduzir bugs nos quais você acidentalmente permanece segurando o wake lock e, portanto, deixa a tela ligada.
É muito, muito melhor usar o sinalizador de janela FLAG_KEEP_SCREEN_ON, que você pode habilitar na janela de sua atividade da onCreate()seguinte maneira:
Isso garantirá que a tela permaneça ligada enquanto a janela estiver em primeiro plano e apenas enquanto estiver em primeiro plano. Isso simplifica muito esse caso de uso comum, eliminando qualquer malabarismo necessário para fazer as transições do aplicativo entre os estados.
Isso evita que o dispositivo hiberne? Nesse caso, a banalidade de WAKE_LOCK me parece um erro chocante!
Michael Cramer
32
Sim, mantém a tela ligada e evita que o dispositivo hiberne.
hackbod
1
Sim, você pode remover o sinalizador, com a API de janela apropriada. Você não precisa se preocupar em fazer com que nada seja desenhado, a estrutura faz isso, se necessário.
hackbod de
1
@hakbod: isso funcionaria para manter a tela viva, mas e a tela que está adormecida, ela acordaria e manteria viva ??
Kavitha
5
@ KC202 você pode usar WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON para fazer com que a tela ligue quando sua janela for exibida. Também é frequentemente usado com FLAG_DISMISS_KEYGUARD e / ou FLAG_SHOW_WHEN_LOCKED.
hackbod
34
Esta pergunta já tem uma ótima resposta por @hackbod!
Estou respondendo a esta pergunta com duas soluções adicionais!
1.implementation usandosetKeepScreenOn() in java code
@Overrideprotectedvoid onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);// or any View (in case generated programmatically ) View v = getLayoutInflater().inflate(R.layout.driver_home,null);
v.setKeepScreenOn(true);
setContentView(v);}
1. Não importa o que keepScreenOndeve ser usado Main/Root/Parent View, pode ser usado com qualquer child viewfuncionará Assim como funciona emParent view
2. A única coisa que importa é que de View's Visibility must be visibleoutro modo não funcionará!
nota v.setKeepScreenOn(true);parece ser a única maneira de fazer isso para um fragmento de diálogo em tela cheia
Tim
16
Outra solução é adicionar android:keepScreenOn="true"( documentação ) às visualizações que precisam para manter a tela ligada.
Permite um controle um pouco mais granular em termos de quais visualizações permanecem ativadas e quais não. Você pode até mesmo fazer referência a uma configuração de um arquivo de recurso dessa maneira.
Respostas:
POR FAVOR, NÃO USE UM WAKE LOCK
Isso requer que você dê ao seu aplicativo uma permissão adicional, e é muito fácil introduzir bugs nos quais você acidentalmente permanece segurando o wake lock e, portanto, deixa a tela ligada.
É muito, muito melhor usar o sinalizador de janela
FLAG_KEEP_SCREEN_ON
, que você pode habilitar na janela de sua atividade daonCreate()
seguinte maneira:Isso garantirá que a tela permaneça ligada enquanto a janela estiver em primeiro plano e apenas enquanto estiver em primeiro plano. Isso simplifica muito esse caso de uso comum, eliminando qualquer malabarismo necessário para fazer as transições do aplicativo entre os estados.
fonte
Esta pergunta já tem uma ótima resposta por @hackbod!
Estou respondendo a esta pergunta com duas soluções adicionais!
Solução existente:
Soluções Adicionais:
podemos usar
keepScreenOn
1.
implementation
usandosetKeepScreenOn() in java code
Documentos http://developer.android.com/reference/android/view/View.html#setKeepScreenOn(boolean)
2. Adicionando
keepScreenOn
axml layout
Documentos http://developer.android.com/reference/android/view/View.html#attr_android%3akeepScreenOn
Nota (alguns pontos úteis):
1. Não importa o que
keepScreenOn
deve ser usadoMain/Root/Parent View
, pode ser usado com qualquerchild view
funcionará Assim como funciona emParent view
2. A única coisa que importa é que de
View's Visibility must be visible
outro modo não funcionará!fonte
v.setKeepScreenOn(true);
parece ser a única maneira de fazer isso para um fragmento de diálogo em tela cheiaOutra solução é adicionar
android:keepScreenOn="true"
( documentação ) às visualizações que precisam para manter a tela ligada.Permite um controle um pouco mais granular em termos de quais visualizações permanecem ativadas e quais não. Você pode até mesmo fazer referência a uma configuração de um arquivo de recurso dessa maneira.
fonte