¿Cómo evito que la pantalla del iPhone se oscurezca o se apague mientras se ejecuta mi aplicación?

114

Estoy trabajando en una aplicación que no requiere intervención del usuario, pero no quiero que el iPhone entre en modo de ahorro de energía.

¿Es posible deshabilitar el ahorro de energía desde una aplicación?

lajos
fuente
7
¿Qué pasa con los votos negativos en todas las preguntas recientes? Me parece una pregunta válida.
Eric Schoonover

Respuestas:

172

C objetivo

[[UIApplication sharedApplication] setIdleTimerDisabled:YES];

Rápido

UIApplication.shared.isIdleTimerDisabled = true
lajos
fuente
2
¿Importa dónde se usa esta línea de código? ¿Debería estar en AppDelegate o en el controlador de vista principal de la aplicación?
16
Eso depende de cómo pretenda usarlo. Es posible que solo tenga una vista que no desee que se agote en su aplicación. En este caso, lo usaría en ese controlador de vista (cuando aparece la vista). Para volver a habilitar el temporizador, usaría [[UIApplication sharedApplication] setIdleTimerDisabled:NO];cuando la vista desaparezca.
Liam George Betsworth
2
¿La aplicación necesita volver a habilitar el temporizador cuando la aplicación ha perdido el foco, o el sistema operativo lo maneja automáticamente?
Stan James
5
Stan: cuando la aplicación deja de estar activa, el sistema operativo volverá a habilitar el modo inactivo, no es necesario que llames[[UIApplication sharedApplication] setIdleTimerDisabled:NO];
Chris Stringer
En mi humilde opinión, no hay diferencia de cómo se llama esto. Siempre es la aplicación completa y cada vista se mantiene en la pantalla, no atenuada.
décadas
20

En Swift puedes usar esto como

UIApplication.sharedApplication().idleTimerDisabled = true
Vettiyanakan
fuente
12

Swift 3:

UIApplication.shared.isIdleTimerDisabled = true
Charlie Seligman
fuente
Esto también sigue siendo el mismo para Swift 4
Branson Camp
2

He puesto esta línea de código en mi controlador de vista, pero todavía recibimos clientes que dicen que la pantalla se atenuará o se apagará hasta que alguien toque la pantalla. He visto otras publicaciones en las que no solo estableces programáticamente

UIApplication.sharedApplication().idleTimerDisabled = true 

a verdadero pero primero debes restablecerlo a falso

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

Lamentablemente, esto todavía no funcionó y los clientes todavía tienen pantallas atenuadas. Tenemos un perfil de Configurador de Apple que evita que el dispositivo entre en suspensión, y aún así la pantalla de algunos dispositivos se atenúa y el cliente debe presionar el botón de inicio para activar la pantalla. Ahora pongo este código en un temporizador que se activa cada 2,5 horas para restablecer el temporizador inactivo, con suerte, esto funcionará.

JMStudios.jrichardson
fuente
1
Lamentablemente, poner el código en una función que se activa con un temporizador no solucionó el problema. Dejé mi iPad encendido durante más de 24 horas y no se apagó ni hubo interacción. Según uno de nuestros clientes, un usuario usó el dispositivo 15 minutos antes y luego el dispositivo se oscureció.
JMStudios.jrichardson
Tengo el mismo problema: tengo un controlador de vista en el que configuro idelTimerDisabled = true (se supone que la aplicación debe permanecer abierta durante la noche, un despertador), y la mayoría de las veces funciona, pero a veces la aplicación está en segundo plano en algún momento de la noche. ¿Alguien tiene una idea de qué podría mover la aplicación a un segundo plano? o restablecer la bandera?
Yariv Adam
Sí, podrías restablecer la bandera y yo también lo estaba haciendo. También tuve esto en una función. Resulta que fue un "proceso de enrutamiento" en nuestro servidor MDM enviando pings a nuestros dispositivos para atenuar las pantallas. muy molesto.
JMStudios.jrichardson
0

Tuvimos el mismo problema. Resultó ser un proceso fraudulento en nuestro servidor MDM que se eliminó en nuestra cuenta, pero en el servidor todavía estaba enviando el comando para atenuar nuestros dispositivos.

JMStudios.jrichardson
fuente