Erkennung, wenn die app ist immer aktiv vom lockscreen vs andere auf iOS7
Meine app hat sich anders Verhalten, wenn Sie aktiv werden, aus dem lockscreen (gesperrt, während Sie aktiv ist), oder immer aktiv sein, durch irgendetwas anderes.
Auf iOS 6 und niedriger konnte ich erkennen, dieses
UIApplicationState state = [[UIApplication sharedApplication] applicationState];
if (UIApplicationStateInactive == state)
//Coming from locked screen (iOS 6)
else
//Coming from Springboard, another app, etc...
Aber auf iOS 7, dem Staat Wert ist UIApplicationStateBackground
in beiden Szenarien. Ist dies das gewünschte Verhalten? Wie kann ich richtig erkennen, ob die app starten aus dem lockscreen jetzt?
Registrierten devs, die ich bereits gebucht dies auf der devforums, bevor die NDA aufgehoben wurde, siehe hier
Ich glaube nicht, dass Sie dies tun können. In der Tat, auch auf iOS 6 waren Sie Annahmen, Sie konnte nicht einfach machen. Der Zustand der Anwendung ist auch
Es hat eigentlich immer sehr zuverlässig, für meinen use-case, bis iOS 7. Ich vereinfacht den code für die Zwecke dieser Frage.
Ich bin versucht zu sagen, dass dieser code (iOS 6) kann zuverlässig erkennen, wenn Sie sich aus dem lock-screen, aber auch erkennen, wenn der Benutzer wieder nach einem Anruf. Wenn Sie irgendwie in der Lage waren zu unterscheiden, die jene Ereignisse, große (und ich bin wirklich daran interessiert, wie, denn soweit ich wusste ja, dass ist/war nicht möglich).
Für meine Zwecke ist die app behandelt diesen Fällen die gleiche. Ich bin nur daran interessiert, wenn es vom Sprungbrett, das ist das Verhalten, das geändert hat
UIApplicationStateInactive
wenn Sie wurden unterbrochen durch einen Anruf, zum Beispiel.Es hat eigentlich immer sehr zuverlässig, für meinen use-case, bis iOS 7. Ich vereinfacht den code für die Zwecke dieser Frage.
Ich bin versucht zu sagen, dass dieser code (iOS 6) kann zuverlässig erkennen, wenn Sie sich aus dem lock-screen, aber auch erkennen, wenn der Benutzer wieder nach einem Anruf. Wenn Sie irgendwie in der Lage waren zu unterscheiden, die jene Ereignisse, große (und ich bin wirklich daran interessiert, wie, denn soweit ich wusste ja, dass ist/war nicht möglich).
Für meine Zwecke ist die app behandelt diesen Fällen die gleiche. Ich bin nur daran interessiert, wenn es vom Sprungbrett, das ist das Verhalten, das geändert hat
InformationsquelleAutor coneybeare | 2013-10-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
War ich in der Lage, herauszufinden, einen hack auf dies und so weit scheint zuverlässig zu sein. Es funktioniert nur auf dem Gerät, nicht den simulator, und wurde getestet auf einem iPhone 5s, 5 und 4S mit iOS 7.
Scheint es, dass es keine Möglichkeit zu erkennen, wo die app wird gestartet auf iOS 7, aber es ist Möglichkeit zu erkennen, wenn Sie werde der lock-screen vs-Sprungbrett. Der trick ist, Lesen Sie die Helligkeit des Bildschirms in
applicationDidEnterBackground
. Wenn die app schlägt in den hintergrund aufgrund der lock-Taste gedrückt oder ein auto-lock-timeout, Helligkeit, wird 0.0 auf iOS 7. Ansonsten, es wird > 0, wenn die home-Taste gedrückt wird oder eine andere app gestartet von der Multitasking-Auswahl oder ein notification center.Nun, ich habe ein ivar halten dieser info, kann ich es in
applicationWillEnterForeground
festzustellen, meine app flow.Ist es nicht genau das gleiche wie die iOS 6 Verhalten. Auf iOS 6, könnten Sie prüfen die
UIApplicationState
zu erkennen, wo Sie herkamen, und diese Lösung Antworten die ähnliche, aber nicht genau das gleiche, Frage, wo Sie waren das gehen, wenn die app im hintergrund. Zum Beispiel, vielleicht die app wurde im hintergrund durch eine Display-Sperre timeout, aber dann eine Benachrichtigung für eine andere app wachte am Gerät, und der Benutzer ging es direkt aus dem lockscreen, dann zurück zu meiner app. Meine app wäre bestimmt auf backgrounding, dass der Benutzer ging um den lockscreen, aber wenn Sie kommen zurück, Sie sind tatsächlich aus einem aktiven Bildschirm. Für meine app, dieser Unterschied ist gering, aber Ihre Laufleistung variieren.Also was ist mit älteren OS-Unterstützung? Meine app unterstützt auch iOS 6 an, so dass ich brauchte, um das alte Verhalten zu. Einfach. Nur die Anwendung staatlicher überwachung in den Vordergrund-Methode:
Ich bin nicht sicher, wie zuverlässig die Helligkeit zu Lesen ist, oder ob es sich in Zukunft ändern wird OS baut, aber in der Zwischenzeit, dieser hack scheint zu sein, die beste, die wir bekommen können. Hoffe, das hilft.
Ich weiß nicht, aber ich bin fast sicher es ist eine race-Bedingung hier. Ich habe einen Kumpel, der Sie realisiert dies und fügte hinzu, eine Ausführung im hintergrund Verzögerung von ein paar ms, es zu schaffen. Ich warte immer noch Apple-überprüfung, um einige Datenpunkte von Kunden (test in der Produktion, yay!) vor der Umsetzung der gleichen Verzögerung
Also getestet habe ich mit einem NSTimer auf ein leeres Projekt (und die Helligkeit Lesen in der Auswahl) und noch immer eine 1.0 Helligkeit, wenn ich drücken Sie die Schaltfläche "sperren". Getestet habe ich mit background-queue mit kein Glück. Einmal haben Sie mehr Sichtbarkeit auf die anderen Variablen, aktualisieren Sie bitte uns. Viel Glück mit abgeben.
Seltsam, das funktioniert zu 99% der Zeit für alle, die ich gehört habe, es zu benutzen, außer auf älteren Geräten.
Ich habe versucht, diese auf dem iPHone 5 mit iOS 7.0.4. Funktioniert nicht. [ [UIScreen mainScreen] brightness] gibt immer Wert auf Einstellungen->Helligkeit. Ich habe sogar versucht, diese Methode aufrufen, nach 5 Sekunden Verzögerung - das gleiche Ergebnis.
InformationsquelleAutor coneybeare
Eigentlich der einzige richtige Weg, um Ihre app Verhalten, wenn Sie aktiv werden, ist über das app-delegate-Methoden.
Diese beiden werden aufgerufen, wenn die app läuft im hintergrund und wird aktiv, entweder über die multitasking-Benutzeroberfläche oder nach einem Anruf oder einer anderen Unterbrechung.
Wenn die app geöffnet wird, vom Sprungbrett und wird nicht im hintergrund ausgeführt wird diese Methode aufgerufen:
InformationsquelleAutor Nikos M.