A API Screen Wake Lock oferece uma maneira de impedir que os dispositivos escureçam ou bloqueiem a tela quando um aplicativo precisa continuar em execução.
O que é a API Screen Wake Lock?
Para evitar o consumo da bateria, a maioria dos dispositivos entra no modo suspenso rapidamente quando é deixado inativo. Embora isso não seja um problema na maioria das vezes, alguns aplicativos precisam manter com a tela acordado para concluir o trabalho. Por exemplo, apps de culinária que mostram as etapas de uma receita ou de um jogo como o Ball Puzzle, que usa o dispositivo Motion APIs para entrada.
A API Screen Wake Lock oferece uma maneira de impedir o escurecimento do dispositivo. e bloquear a tela. Isso permite novas experiências que, até agora, exigiam um app específico da plataforma.
A API Screen Wake Lock reduz a necessidade de hackers e potencialmente soluções alternativas que consomem muita energia. Ele aborda as deficiências de uma API mais antiga que se limitava a simplesmente manter a tela acesa e tinha várias problemas de segurança e privacidade.
Casos de uso sugeridos para a API Screen Wake Lock
RioRun (em inglês). um app da Web desenvolvido pelo The Guardian era um caso de uso perfeito (embora não esteja mais disponível). O aplicativo leva você em um tour de áudio virtual pelo Rio, seguindo a rota da Nação 2016 maratona olímpica. Sem os wake locks, os usuários telas se desligavam frequentemente enquanto o tour era reproduzido, dificultando o uso.
É claro que há muitos outros casos de uso:
- Um app de receitas que mantém a tela acesa enquanto você assa um bolo ou cozinha o jantar
- Um app de cartão de embarque ou de ingressos que protege a tela até que o código de barras seja lido
- Um aplicativo no estilo quiosque que mantém a tela ligada o tempo todo
- Um aplicativo de apresentação baseado na web que mantém a tela durante uma apresentação
Status atual
Etapa | Status |
---|---|
1. Criar explicação | N/A |
2. Criar um rascunho inicial da especificação | Concluído |
3. Reunir feedback e iterar o design | Concluído |
4. Teste de origem | Concluído |
5. lançamento | Concluído |
Como usar a API Screen Wake Lock
Tipos de wake lock
No momento, a API Screen Wake Lock oferece apenas um tipo de wake lock: screen
.
Wake lock do screen
Um wake lock screen
impede que a tela do dispositivo gire
para que o usuário possa ver as informações exibidas na tela.
Receber um wake lock de tela
Para solicitar um wake lock de tela, é necessário chamar o método navigator.wakeLock.request()
que retorna um objeto WakeLockSentinel
.
Você transmite a esse método o tipo de wake lock desejado como um parâmetro,
que atualmente está limitado a apenas 'screen'
e, portanto, é opcional.
O navegador pode recusar o pedido por vários motivos (por exemplo,
porque o nível de carga da bateria está muito baixo),
Por isso, é recomendável envolver a chamada em uma instrução try…catch
.
A mensagem da exceção vai conter mais detalhes em caso de falha.
Como liberar um wake lock de tela
Você também precisa de uma maneira de liberar o wake lock de tela, que é conseguido chamando o
Método release()
do objeto WakeLockSentinel
.
Se você não armazenar uma referência ao WakeLockSentinel
, não será possível
para liberar o bloqueio manualmente, mas ele será liberado quando a guia atual estiver invisível.
Se quiser liberar automaticamente o wake lock de tela
após um determinado período de tempo,
você pode usar window.setTimeout()
para chamar release()
, conforme mostrado no exemplo abaixo.
// The wake lock sentinel.
let wakeLock = null;
// Function that attempts to request a screen wake lock.
const requestWakeLock = async () => {
try {
wakeLock = await navigator.wakeLock.request();
wakeLock.addEventListener('release', () => {
console.log('Screen Wake Lock released:', wakeLock.released);
});
console.log('Screen Wake Lock released:', wakeLock.released);
} catch (err) {
console.error(`${err.name}, ${err.message}`);
}
};
// Request a screen wake lock…
await requestWakeLock();
// …and release it again after 5s.
window.setTimeout(() => {
wakeLock.release();
wakeLock = null;
}, 5000);
O objeto WakeLockSentinel
tem uma propriedade com o nome released
que
indica se uma sentinela já foi liberada.
Seu valor é inicialmente false
e muda para true
quando um "release"
é despachado. Essa propriedade ajuda os desenvolvedores Web a saber quando um bloqueio
foi lançado para que não precisem acompanhar isso manualmente.
Ela está disponível a partir do Chrome 87.
O ciclo de vida do wake lock de tela
Ao brincar com a demonstração do wake lock de tela, você vai notar que os wake locks de tela são sensíveis à visibilidade da página. Isso significa que o wake lock de tela serão liberados automaticamente quando você minimizar guia ou janela, ou sair de uma guia ou janela em que um wake lock de tela esteja ativo.
Para recuperar o wake lock de tela,
detectar o evento visibilitychange
e solicite um novo wake lock de tela quando eles ocorrerem:
const handleVisibilityChange = async () => {
if (wakeLock !== null && document.visibilityState === 'visible') {
await requestWakeLock();
}
};
document.addEventListener('visibilitychange', handleVisibilityChange);
Minimizar o impacto nos recursos do sistema
Você deve usar um wake lock de tela no seu app? A abordagem adotada depende das necessidades do seu app. Independentemente disso, você deve usar a abordagem mais leve possível para que seu aplicativo minimize a nos recursos do sistema.
Antes de adicionar um wake lock de tela ao seu app, considere se seus casos de uso poderiam pode ser resolvido com uma das seguintes soluções alternativas:
- Se o app estiver realizando downloads de longa duração, considere usar busca em segundo plano.
- Se seu aplicativo estiver sincronizando dados de um servidor externo, considere o uso sincronização em segundo plano.
Demonstração
Confira a demonstração do Wake Lock de tela e a fonte da demonstração. Observe como o wake lock de tela é liberado automaticamente quando você troca de guia ou apps.
Wake locks de tela no gerenciador de tarefas do SO
Você pode usar o gerenciador de tarefas do seu sistema operacional para ver se um aplicativo está impedindo o computador do dispositivo à suspensão. O vídeo abaixo mostra o console do Monitor de atividade indicando que o Chrome tem um wake lock ativo de tela que mantém o sistema ativo.
Feedback
O Web Platform Incubator Community Group (WICG) (link em inglês) e a equipe do Chrome querem saber sobre seus ideias e experiências com a API Screen Wake Lock.
Fale sobre o design da API
Alguma coisa na API não funciona como esperado? Ou estão faltando métodos ou propriedades de que você precisa para implementar sua ideia?
- Registre um problema de especificação no repositório da API Screen Wake Lock no GitHub (em inglês). ou adicionar ideias a um problema.
Informar um problema com a implementação
Você encontrou um bug na implementação do Chrome? Ou a implementação diferente das especificações?
- Registre um bug em https://new.crbug.com. Não deixe de incluir
possível, fornecer instruções simples para reproduzir o bug e
Defina Componentes como
Blink>WakeLock
. O Glitch funciona muito bem para compartilhar reproduções rápidas e fáceis.
Mostrar suporte à API
Você planeja usar a API Screen Wake Lock? Seu apoio público ajuda os A equipe do Chrome prioriza recursos e mostra a outros fornecedores de navegador como é crucial apoiá-las.
- Compartilhe como você planeja usar a API na conversa sobre a WCG (em inglês).
- Envie um tweet para @ChromiumDev usando a hashtag
#WakeLock
e informe onde e como você o utiliza.
Links úteis
- Especificação Candidate Recommendation | Rascunho do editor
- Demonstração do Wake Lock de tela | Fonte da demonstração do Wake Lock de tela
- Rastreamento de bug
- Entrada de ChromeStatus.com
- Como fazer experimentos com a API Wake Lock
- Componente Blink:
Blink>WakeLock
Agradecimentos
Imagem principal de Kate Stone Matheson no Unsplash. Vídeo do gerenciador de tarefas cortesia de Henry Lim.