2012-03-28 4 views
38

Die folgende Codezeile verhindert, dass die App den Bildschirm nach einer gewissen Leerlaufzeit automatisch sperrt.Deaktivieren der automatischen Bildschirmsperre in iOS 5.1

[UIApplication sharedApplication].idleTimerDisabled = YES; //write this in applicationDidFinishLaunching 

Es funktioniert gut bis iOS 5.0. Aber iOS 5.1 respektiert diese Zeile nicht und sperrt den Bildschirm nach einiger Leerlaufzeit. Wie löst man dieses irritierende Problem?

Danke.

Edit:

Der gleiche Code funktioniert gut, wenn seine in 5.0.1 Gerät installiert ist. Aber ich weiß nicht, warum es nicht mit 5.1-Gerät funktioniert.

+2

, die wie ein Fehler klingt. Wenn Sie Fehler melden möchten -> http://bugreport.apple.com/ –

+0

Wo rufen Sie diesen Code? Sind Sie sicher, dass es ausgeführt wird (haben Sie einen Haltepunkt gesetzt und überprüft)? Apples Beispiel ist 'application.idleTimerDisabled = YES;' in der 'applicationDidFinishLaunching' des Delegaten –

+0

Ja @NickBull ich hatte den Code nur in applicationDidFinishLaunch gesetzt. Aber wie Sie sehen können, funktioniert der gleiche Code gut, wenn es in 5.0.1 Gerät installiert ist. – Selvin

Antwort

24

Gerade [UIApplication sharedApplication].idleTimerDisabled = YES; in

- (BOOL) application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions 

funktioniert gut für mich zu setzen. Es gibt jedoch einen Vorbehalt. Ich habe bemerkt, dass jedes Mal, wenn ich das Kamera-Dienstprogramm aufrufe, um einen Snapshot zu machen, idleTimerDisable wird auf NO hinter der Szene gesetzt. So, nachdem ich mein Bild hochladen, hatte ich wieder die folgende Zeile Code zu nennen:

[UIApplication sharedApplication].idleTimerDisabled = YES; 

Ich wäre nicht überrascht, wenn es mehr Orte sind während dieser gleiche Strategie erfordern. Bis jetzt hat dieser Ansatz für mich ohne Probleme funktioniert.

+1

Ich brauche nicht wirklich idleTimerDisabled = YES in der ganzen App. Sie können einfach [[UIApplication sharedApplication] setIdleTimerDisabled: YES]; wo Sie Code brauchen und schalten Sie die Eigenschaft aus, wenn nicht mehr notwendig ist mit [[UIApplication sharedApplication] setIdleTimerDisabled: NO]; –

3

Wichtig Siehe: sollten Sie diese Eigenschaft nur bei Bedarf und sollten sicher sein, es zurücksetzen NO, wenn die Notwendigkeit besteht nicht mehr. Die meisten Anwendungen sollten das System den Bildschirm ausschalten lassen, wenn der Leerlauf Timer abläuft. Dies schließt Audioanwendungen ein. Bei entsprechender Verwendung von von Audio Session Services wird die Wiedergabe und Aufnahme fortgesetzt, wenn der Bildschirm ausgeschaltet wird . Die einzigen Anwendungen, die deaktivieren den Leerlauf-Timer sind Mapping-Anwendungen, Spiele oder ähnliche Programme mit sporadischer Benutzerinteraktion.

Vielleicht überschreiten Sie das zulässige Zeitlimit, wach zu sein?

+0

Meine Anwendung ist definitiv eine mit sporadischen Benutzerinteraktion;) aber sehen Sie, dass der Code in 5.0.1 ohne Problem funktioniert. Das kommt merkwürdig vor. – Selvin

0

Funktioniert einwandfrei, wenn Ihre Anwendung für eine Hintergrundaufgabe registriert ist, z. B. GPS-Standortaktualisierung.

24
[[UIApplication sharedApplication] setIdleTimerDisabled: YES]; 

arbeitete für mich auf iOS 5.1

1

ich weiß, seine alte, aber ich fand das gut und in Swift man kann es sich um eine ähnliche

application.idleTimerDisabled = true

Danke für deine Antworten suchen tun!Ich benutze jetzt Xcode 7 Beta 3 (Swift 2)

+0

Swift 3: 'application.isIdleTimerDisabled = true' – Crashalot

0

Für Swift, verwende ich diese außerhalb von Delegierten zu tun:

UIApplication.sharedApplication().idleTimerDisabled = true