Comment éviter que l'écran de l'iPhone ne s'assombrisse ou ne s'éteigne pendant l'exécution de mon application?

114

Je travaille sur une application qui ne nécessite aucune entrée de l'utilisateur, mais je ne veux pas que l'iPhone entre en mode d'économie d'énergie.

Est-il possible de désactiver l'économie d'énergie à partir d'une application?

lajos
la source
7
Qu'en est-il des votes négatifs sur toutes les questions récentes? Cela me semble être une question valable.
Eric Schoonover le

Réponses:

172

Objectif c

[[UIApplication sharedApplication] setIdleTimerDisabled:YES];

Rapide

UIApplication.shared.isIdleTimerDisabled = true
lajos
la source
2
L'endroit où cette ligne de code est utilisée est-il important? Doit-il se trouver dans AppDelegate ou dans le contrôleur d'affichage principal de l'application?
16
Cela dépend de la manière dont vous comptez l'utiliser. Vous ne pouvez avoir qu'une seule vue que vous ne souhaitez pas expirer dans votre application. Dans ce cas, vous l'utiliseriez dans ce contrôleur de vue (lorsque la vue apparaît). Pour réactiver le minuteur, vous utiliseriez ensuite [[UIApplication sharedApplication] setIdleTimerDisabled:NO];lorsque la vue disparaît.
Liam George Betsworth
2
L'application doit-elle réactiver le minuteur lorsque l'application a perdu le focus, ou est-ce géré automatiquement par le système d'exploitation?
Stan James
5
Stan - lorsque l'application démissionne active, le système d'exploitation réactivera le mode veille, vous n'avez pas à appeler[[UIApplication sharedApplication] setIdleTimerDisabled:NO];
Chris Stringer
IMHO cela ne fait aucune différence d'où vous appelez cela. Il s'agit toujours de l'ensemble de l'application et chaque vue est conservée à l'écran et non grisée.
décennies
20

En rapide, vous pouvez l'utiliser comme

UIApplication.sharedApplication().idleTimerDisabled = true
Vettiyanakan
la source
12

Swift 3:

UIApplication.shared.isIdleTimerDisabled = true
Charlie Seligman
la source
Cela reste le même pour Swift 4 également
Branson Camp
2

J'ai mis cette ligne de code dans mon contrôleur de vue, mais les clients continuent de dire que l'écran s'assombrira ou s'éteindra jusqu'à ce que quelqu'un touche l'écran. J'ai vu d'autres articles où non seulement vous définissez par programme

UIApplication.sharedApplication().idleTimerDisabled = true 

à true mais vous devez d'abord le réinitialiser sur false

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

Malheureusement, cela n'a toujours pas fonctionné et les clients ont toujours des écrans tamisés. Nous avons un profil Apple Configurator empêchant l'appareil de se mettre en veille, et l'écran de certains appareils s'assombrit et le client doit appuyer sur le bouton d'accueil pour réveiller l'écran. Je mets maintenant ce code dans une minuterie qui se déclenche toutes les 2,5 heures pour réinitialiser la minuterie d'inactivité, j'espère que cela fonctionnera.

JMStudios.jrichardson
la source
1
Malheureusement, mettre le code dans une fonction qui se déclenche sur une minuterie n'a pas résolu le problème. J'ai laissé mon iPad allumé pendant plus de 24 heures et il ne s'est pas atténué et aucune interaction. Selon l'un de nos clients, un utilisateur a utilisé l'appareil 15 minutes avant, puis l'appareil s'est éteint.
JMStudios.jrichardson
J'ai le même problème: j'ai un contrôleur de vue où j'ai défini idelTimerDisabled = true (l'application est censée rester ouverte toute la nuit, un réveil), et la plupart du temps cela fonctionne, mais parfois l'application est en arrière-plan parfois pendant la nuit. Quelqu'un a-t-il une idée de ce qui pourrait déplacer l'application en arrière-plan? ou réinitialiser le drapeau?
Yariv Adam
Oui, vous pouviez réinitialiser le drapeau et je le faisais aussi. J'avais aussi ça dans une fonction. Il s'est avéré que c'était un "processus rouge" sur notre serveur MDM qui envoyait des pings à nos appareils pour atténuer les écrans. très ennuyant.
JMStudios.jrichardson
0

Nous avions le même problème. S'est avéré être un processus malveillant sur notre serveur MDM qui a été supprimé dans notre compte mais sur le serveur envoyait toujours la commande pour atténuer nos appareils.

JMStudios.jrichardson
la source