Como evito que a tela do iPhone escureça ou desligue enquanto meu aplicativo está em execução?

114

Estou trabalhando em um aplicativo que não requer intervenção do usuário, mas não quero que o iPhone entre no modo de economia de energia.

É possível desativar a economia de energia de um aplicativo?

lajos
fonte
7
O que há com os votos negativos em todas as questões recentes? Esta me parece uma pergunta válida.
Eric Schoonover

Respostas:

172

Objective-C

[[UIApplication sharedApplication] setIdleTimerDisabled:YES];

Rápido

UIApplication.shared.isIdleTimerDisabled = true
lajos
fonte
2
Faz diferença onde esta linha de código é usada? Deve ser no AppDelegate ou no viewcontroller principal do aplicativo?
16
Isso depende de como você pretende usá-lo. Você pode ter apenas um modo de exibição que não deseja atingir no aplicativo. Neste caso, você o usaria naquele controlador de visualização (quando a visualização aparecer). Para reativar o cronômetro, você usaria [[UIApplication sharedApplication] setIdleTimerDisabled:NO];quando a visualização desaparecer.
Liam George Betsworth,
2
O aplicativo precisa reativar o cronômetro quando o aplicativo perdeu o foco ou isso é feito automaticamente pelo sistema operacional?
Stan James,
5
Stan - quando o aplicativo for desativado, o sistema operacional reativará o modo inativo, você não precisa ligar[[UIApplication sharedApplication] setIdleTimerDisabled:NO];
Chris Stringer,
IMHO, não faz diferença de onde você chama isso. É sempre o hit do aplicativo inteiro e cada visualização é mantida na tela, não escurecida.
décadas de
20

No swift, você pode usar isso como

UIApplication.sharedApplication().idleTimerDisabled = true
Aby Mathew
fonte
12

Swift 3:

UIApplication.shared.isIdleTimerDisabled = true
Charlie Seligman
fonte
Isso permanece o mesmo para o Swift 4 também
Branson Camp
2

Eu coloquei esta linha de código em meu controlador de visualização, mas ainda recebemos clientes dizendo que a tela ficará escura ou desligada até que alguém toque na tela. Já vi outras postagens em que você não apenas define programaticamente

UIApplication.sharedApplication().idleTimerDisabled = true 

para verdadeiro, mas você deve redefini-lo para falso primeiro

UIApplication.sharedApplication().idleTimerDisabled = false
UIApplication.sharedApplication().idleTimerDisabled = true

Infelizmente, isso ainda não funcionou e os clientes ainda estão recebendo telas escurecidas. Temos o perfil do Apple Configurator evitando que o dispositivo entre no modo de hibernação, e ainda assim a tela de alguns dispositivos fica escura e o cliente precisa pressionar o botão home para ativar a tela. Agora coloquei esse código em um cronômetro que dispara a cada 2,5 horas para zerar o cronômetro de inatividade, espero que funcione.

JMStudios.jrichardson
fonte
1
Infelizmente, colocar o código em uma função que dispara em um cronômetro não corrigiu o problema. Deixei meu iPad ligado por mais de 24 horas e ele não escureceu e não houve interação. De acordo com um de nossos clientes, um usuário usou o dispositivo 15 minutos antes e depois o dispositivo escureceu.
JMStudios.jrichardson
Estou tendo o mesmo problema: tenho um controlador de visualização onde defino idelTimerDisabled = true (o aplicativo deve permanecer aberto durante a noite, um despertador) e na maioria das vezes funciona, mas às vezes o aplicativo está em segundo plano em algum momento durante a noite. Alguém tem uma ideia do que poderia colocar o app em segundo plano? ou redefinir a bandeira?
Yariv Adam
Sim, você poderia redefinir a bandeira e eu estava fazendo isso também. Eu tinha isso em uma função também. Acontece que foi um "processo de rouge" em nosso servidor MDM enviando pings para nossos dispositivos para escurecer as telas. muito irritante.
JMStudios.jrichardson
0

Estávamos tendo o mesmo problema. Acabou sendo um processo invasor em nosso servidor MDM que foi excluído de nossa conta, mas no servidor ainda estava enviando o comando para escurecer nossos dispositivos.

JMStudios.jrichardson
fonte