Comment désactiver / activer le mode veille par programmation dans iOS?


162

J'ai une application qui doit rester éveillée jusqu'à la fin d'un compte à rebours, mais elle passera en `` mode veille '' chaque fois qu'elle atteindra le temps alloué pour dormir.

Dans mon application, j'ai la possibilité de reporter la mise en veille afin que les utilisateurs puissent la désactiver / l'activer.

Comment le faire par programmation?

Réponses:


379

Vous pouvez désactiver la minuterie d'inactivité comme suit;

En Objective-C:

[UIApplication sharedApplication].idleTimerDisabled = YES;

Dans Swift:

UIApplication.sharedApplication().idleTimerDisabled = true

Dans Swift 3.0 et Swift 4.0:

UIApplication.shared.isIdleTimerDisabled = true

Réglez-le sur NOou falsepour réactiver le mode veille.

Par exemple, si vous en avez besoin jusqu'à ce que vous quittiez la vue, vous pouvez la réinitialiser en remplaçant la valeur viewWillDisappear:

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

En savoir plus sur la classe UIApplication .


@Gati J'en doute, mais je ne peux pas confirmer car je n'ai pas de montre
jrturton

1
@jrturton Hmm .. Cela ne fonctionne pas dans la montre Apple. Si vous avez une solution à ce problème, veuillez me le faire savoir.
iGatiTech

Merci pour cette information. Cela vous sera utile. Je me demandais si la désactivation du mode veille dans une application affecterait l'ensemble de l'appareil. Par exemple, si je la désactive dans mon application puis que je quitte l'application, sera-t-elle toujours désactivée après la sortie de l'application? Dois-je vérifier s'il est actif ou non, puis le réactiver à la sortie?
Scott Kilbourn

2
@ScottKilbourn cela n'affecte que votre application. [UIApplication sharedApplication]fait uniquement référence à l'objet UIApplication de votre application.
jrturton

22

Dans Swift 3, pour désactiver la minuterie d'inactivité, c'est maintenant:

UIApplication.shared.isIdleTimerDisabled = true

Pour réactiver la minuterie d'inactivité, il suffit de:

UIApplication.shared.isIdleTimerDisabled = false

De plus, notez que YESet NOne sont pas disponibles dans Swift et que vous devez utiliser soit trueou false(contrairement à la réponse précédente).


1

iOS 13, Swift 5,5.1+ pour désactiver la minuterie d'inactivité. Dans SceneDelegate.swift.

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

-5

dans Swift 3, l'emplacement exact où cela peut être fait est AppDelegate.swift- vous devez ajouter à l' UIApplication.shared.isIdleTimerDisabled = trueintérieur applicationfunc pour que le résultat ressemble à ceci:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    UIApplication.shared.isIdleTimerDisabled = true
    return true
}

2
Cela ne dépend pas d'AppDelegate. En fait, je considérerais que c'est une mauvaise pratique de garder l'appareil éveillé sans aucune raison réelle. La question était de garder l'appareil éveillé pendant une fonctionnalité spécifique (jusqu'à la fin d'un compte à rebours). Donc, la désactivation de la minuterie d'inactivité lorsque le compte à rebours commence à se terminer, la réactiver après la fin du compte à rebours doit être envisagée.
Martin

@Cyrus Je ne suis pas un programmeur rapide. actuellement, je crée une application de visualisation Web et j'ai essayé beaucoup de solutions sans instructions précises et cela n'a pas fonctionné pour moi, mais CELA FONCTIONNE. donc je poste ceci pour partager avec d'autres qui rechercheront une solution similaire. la raison de l'utilisation de ceci - mon application est un assistant de guitare qui doit toujours être éveillé pendant le jeu
godblessstrawberry
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.