¿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?


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

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


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á.


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.