¿Cómo deshabilitar / habilitar el modo de suspensión mediante programación en iOS?

162

Tengo una aplicación que debe permanecer despierta hasta el final de una cuenta regresiva, pero entrará en 'modo de suspensión' siempre que alcance el tiempo asignado para dormir.

En mi aplicación, tengo la opción de posponer el sueño, para que los usuarios puedan deshabilitarlo / habilitarlo.

¿Cómo lo hago programáticamente?

Arnlee Vizcayno
fuente

Respuestas:

379

Puede deshabilitar el temporizador inactivo de la siguiente manera;

En el objetivo-C:

[UIApplication sharedApplication].idleTimerDisabled = YES;

En Swift:

UIApplication.sharedApplication().idleTimerDisabled = true

En Swift 3.0 y Swift 4.0:

UIApplication.shared.isIdleTimerDisabled = true

Vuelva a configurarlo NOo falsevuelva a habilitar el modo de suspensión.

Por ejemplo, si lo necesita hasta que abandone la vista, puede volver a configurarlo anulando viewWillDisappear:

override func viewWillDisappear(_ animated: Bool) {
    UIApplication.shared.isIdleTimerDisabled = false
}

Más sobre UIApplication Class .

jrturton
fuente
@Gati Lo dudo, pero no puedo confirmarlo porque no tengo reloj
jrturton
1
@jrturton Hmm .. No funciona en Apple Watch. Si tiene alguna solución para esto, hágamelo saber.
iGatiTech
Gracias por esta información. Sera util. Me preguntaba si deshabilitar el modo de suspensión en una aplicación afectará a todo el dispositivo. Al igual que si lo deshabilito en mi aplicación y luego salgo de la aplicación, ¿seguirá estando deshabilitado después de que la aplicación salga? ¿Debo verificar si está activo o no, y luego volver a habilitarlo al salir?
Scott Kilbourn
2
@ScottKilbourn solo afecta tu aplicación. [UIApplication sharedApplication]se refiere solo al objeto de aplicación UIA de su aplicación.
jrturton
22

En Swift 3, para desactivar el temporizador inactivo, ahora es:

UIApplication.shared.isIdleTimerDisabled = true

Para volver a activar el temporizador inactivo es simplemente:

UIApplication.shared.isIdleTimerDisabled = false

Además, tenga en cuenta que YESy NOno están disponibles en Swift y que debe usar uno trueo false(en oposición a la respuesta anterior).

Wyetro
fuente
1

iOS 13, Swift 5,5.1+ para deshabilitar el temporizador inactivo. En SceneDelegate.swift.

 func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
     UIApplication.shared.isIdleTimerDisabled = true
 }
Sandeep Maurya
fuente
-5

en Swift 3, la ubicación exacta donde se puede hacer esto es AppDelegate.swift: debe agregar funciones UIApplication.shared.isIdleTimerDisabled = trueinternas applicationpara que el resultado se vea así:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    UIApplication.shared.isIdleTimerDisabled = true
    return true
}
godblessstrawberry
fuente
2
Esto no depende de AppDelegate. De hecho, consideraría una mala práctica mantener el dispositivo despierto sin ningún motivo real. La pregunta era sobre mantener el dispositivo despierto durante una funcionalidad específica (hasta el final de una cuenta regresiva). Por lo tanto, deshabilitar el temporizador inactivo cuando comienza la cuenta regresiva finaliza, habilitándolo nuevamente después de que finalice la cuenta regresiva.
Martin
@ Cyrus No soy un programador rápido. Actualmente estoy haciendo una aplicación webview y probé muchas soluciones sin instrucciones exactas y eso no funcionó para mí, pero ESTO FUNCIONA. así que publico esto para compartirlo con otros que buscarán una solución similar. la razón para usar este - mi aplicación es ayudante de la guitarra que tiene que ser siempre despertar durante el juego
godblessstrawberry