Wie verhindere ich, dass der iPhone-Bildschirm während der Ausführung meiner Anwendung gedimmt oder ausgeschaltet wird?

114

Ich arbeite an einer App, für die keine Benutzereingaben erforderlich sind, aber ich möchte nicht, dass das iPhone in den Energiesparmodus wechselt.

Ist es möglich, das Energiesparen über eine App zu deaktivieren?

lajos
quelle
7
Was ist mit den Abstimmungen zu allen aktuellen Fragen? Dies scheint mir eine berechtigte Frage zu sein.
Eric Schoonover

Antworten:

172

Ziel c

[[UIApplication sharedApplication] setIdleTimerDisabled:YES];

Schnell

UIApplication.shared.isIdleTimerDisabled = true
lajos
quelle
2
Ist es wichtig, wo diese Codezeile verwendet wird? Sollte es sich im AppDelegate oder im Hauptansichtscontroller der App befinden?
16
Das hängt davon ab, wie Sie es verwenden möchten. Möglicherweise haben Sie nur eine Ansicht, für die Sie in Ihrer Anwendung kein Zeitlimit festlegen möchten. In diesem Fall würden Sie es in diesem Ansichts-Controller verwenden (wenn die Ansicht angezeigt wird). Um den Timer wieder zu aktivieren, verwenden Sie ihn, [[UIApplication sharedApplication] setIdleTimerDisabled:NO];wenn die Ansicht verschwindet.
Liam George Betsworth
2
Muss die App den Timer wieder aktivieren, wenn die App den Fokus verloren hat, oder wird dies vom Betriebssystem automatisch erledigt?
Stan James
5
Stan - wenn die App aktiv zurücktritt, wird das Betriebssystem den Leerlaufmodus wieder aktivieren, Sie müssen nicht anrufen[[UIApplication sharedApplication] setIdleTimerDisabled:NO];
Chris Stringer
IMHO macht es keinen Unterschied, wo Sie dies nennen. Es ist immer der gesamte App-Treffer und jede Ansicht wird auf dem Bildschirm angezeigt, nicht abgeblendet.
Jahrzehnte
20

In Swift können Sie dies als verwenden

UIApplication.sharedApplication().idleTimerDisabled = true
Aby Mathew
quelle
12

Swift 3:

UIApplication.shared.isIdleTimerDisabled = true
Charlie Seligman
quelle
Dies gilt auch für Swift 4
Branson Camp
2

Ich habe diese Codezeile in meinen Ansichts-Controller eingefügt, aber wir erhalten immer noch Kunden, die sagen, dass der Bildschirm gedimmt oder ausgeschaltet wird, bis jemand den Bildschirm berührt. Ich habe andere Beiträge gesehen, in denen Sie nicht nur programmgesteuert setzen

UIApplication.sharedApplication().idleTimerDisabled = true 

auf true, aber Sie müssen es zuerst auf false zurücksetzen

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

Leider hat dies immer noch nicht funktioniert und die Kunden erhalten immer noch gedimmte Bildschirme. Wir haben ein Apple Configurator-Profil, das verhindert, dass das Gerät in den Ruhezustand wechselt, und dennoch wird der Bildschirm einiger Geräte dunkel, und der Kunde muss die Home-Taste drücken, um den Bildschirm zu aktivieren. Ich habe diesen Code jetzt in einen Timer eingefügt, der alle 2,5 Stunden ausgelöst wird, um den Leerlauf-Timer zurückzusetzen. Hoffentlich funktioniert dies.

JMStudios.jrichardson
quelle
1
Leider konnte das Problem nicht behoben werden, indem der Code in eine Funktion eingefügt wurde, die auf einem Timer ausgelöst wird. Ich habe mein iPad über 24 Stunden lang eingeschaltet gelassen und es wurde nicht dunkel und es gab keine Interaktion. Laut einem unserer Kunden hat ein Benutzer das Gerät 15 Minuten zuvor verwendet, und dann wurde das Gerät dunkel.
JMStudios.jrichardson
Ich habe das gleiche Problem: Ich habe einen View-Controller, bei dem ich idelTimerDisabled = true gesetzt habe (die App soll die ganze Nacht geöffnet bleiben, ein Wecker), und die meiste Zeit funktioniert sie, aber manchmal ist die App im Hintergrund irgendwann in der Nacht. Hat jemand eine Idee, was die App in den Hintergrund rücken könnte? oder Flagge zurücksetzen?
Yariv Adam
Ja, Sie konnten die Flagge zurücksetzen, und das habe ich auch getan. Ich hatte das auch in einer Funktion. Es stellte sich heraus, dass es sich bei unserem MDM-Server um einen "Rouge-Prozess" handelte, bei dem Pings an unsere Geräte gesendet wurden, um die Bildschirme zu dimmen. sehr nervig.
JMStudios.jrichardson
0

Wir hatten das gleiche Problem. Es stellte sich heraus, dass es sich bei unserem MDM-Server um einen unerwünschten Prozess handelte, der in unserem Konto gelöscht wurde, auf dem Server jedoch weiterhin den Befehl zum Dimmen unserer Geräte sendete.

JMStudios.jrichardson
quelle