Wie unterscheiden Sie zwischen Bildschirm sperren und home-Taste auf iOS5?
Ich bin die Entwicklung einer iPhone-app, die Wiedergabe von audio im hintergrund. Ich möchte die audio zu spielen, wenn der Benutzer sperrt den Bildschirm, aber anhalten, wenn Sie entscheiden, zu einer anderen app wechseln (durch drücken der home-Taste).
Unter iOS 4 war es kein problem, weil die app würde gehen in den inaktiven Zustand, wenn der Bildschirm gesperrt war und nur in den hintergrund verschoben werden, wenn die home-Taste gedrückt wurde. Auf iOS 5, wenn der Bildschirm gesperrt ist, die app ist jetzt auch in den hintergrund gerückt, so scheint es, ist es nicht mehr möglich zu sagen, der Unterschied zwischen den beiden Staaten. Gibt es eine Lösung für dieses problem?
- Dies ist eine nervige Angelegenheit, da jeder google-Suche gibt das ios5 notification center. Ideal, wir könnten finden Sie eine Liste aller system-Meldungen haben wir die Möglichkeit zu registrieren und hoffe, dass etwas erscheint
- Das OS wird sich darum kümmern, dass für Sie, solange Sie konfigurieren Sie Ihre audio-Sitzung entsprechend, oder so scheint es (ich bin kein audio-Programmierer). Wenn Sie die Suche nach "Bildschirm sperren" in der Dokumentation finden Sie Informationen, die Ihnen helfen sollen in der Audio-Session-Programming Guide (Audio Session Kochbuch).
- möglich, Duplikat der Ist es möglich, zu unterscheiden zwischen sperren Sie das Gerät und senden Sie eine app im hintergrund?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie unterscheiden diese beiden Fälle durch die überprüfung der
applicationState
Eigenschaft vonUIApplication
. Es wird festgelegt, umUIApplicationStateInactive
für eine Anwendung, die es Taten, geben Sie hintergrund, weil der lock-screen, und zuUIApplicationStateBackground
sonst.Loooking für UIApplicationState wenn applicationDidEnterBackground ausgelöst hat schön gearbeitet. Leider wurde dies nun geändert.
Wenn ich kompilieren meine app mit XCode5 zu unterstützen, alle iOS7-Zeug (aber immer noch build-Ziel festgelegt ist 5.0), schließ-Bildschirm gibt jetzt UIApplicationStateBackground, wenn ich früher bekommen habe UIApplicationStateInactive.
Fragte ich aus diesem Apple support und Sie bestätigt, so wird es von nun an. Also, es gibt keine Möglichkeit zu erkennen, wenn Benutzer gedrückt Startseite oder Bildschirm sperren. Das ist traurig, denn ich hatte wirklich guter Fall für Sie zu entdecken.
PS. Meine app, die gebaut wurde, mit XCode 4 noch funktioniert der alte Weg ist auch bei der Ausführung auf iOS7.
Ich habe einen besseren Weg gefunden, dies zu tun.
Unterscheiden zwischen Bildschirm sperren und home-Taste auf iOS7
Dies kann Ihnen helfen, sowohl auf iOS5 & iOS6 & iOS7 Gerät :).Aber es funktionieren nicht auf iOS-Simulator.
Erhalten Sie
[[UIApplication sharedApplication] applicationState]
zu beurteilen, ob Sperrbildschirm oder home-button mitUIApplicationStateInactive
undUIApplicationStateBackground
vor iOS7.Aber diese wurde den gleichen Zustand
UIApplicationStateBackground
auf iOS7, und Sie können beurteilen, es durch die Bildschirm-Helligkeit.Die Helligkeit des Bildschirms sollte 0 sein, wenn in lock-Bildschirm-Staat; ansonsten ist es von home-Taste Zustand.
Kann man den code-Schnipsel in
- (void)applicationDidEnterBackground:(UIApplication *)application
Es ist ein Weg, um dieses Verhalten, aber es kommt mit einem Nachteil. Sie haben zum festlegen der audio-hintergrund-Modus in Ihrem Info.plist und deaktivieren Sie multitasking für Ihre app.
Legen Sie die Audio-Sitzung Kategorie AVAudioSessionCategoryPlayback:
In Ihrem Info.plist-Datei, fügen Sie den Schlüssel "Erforderlich hintergrund-Modus", und fügen Sie das Element "App spielt audio". Dann fügen Sie die-Taste, "Anwendung nicht im hintergrund laufen" und setzen Sie ihn auf "ja"
Nun der lock-screen der app in der audio-hintergrund-Modus (audio läuft weiter) und drücken Sie gleichzeitig die home-Taste beendet die app (und stummschalten des Tons). Wenn der Benutzer zurückkehrt, um Ihre app aus einer anderen app starten wieder. Also, wenn Sie Ihre app nicht zu lange dauern zu laden, und Sie kehren in den vorherigen Zustand nach dem relaunch, könnte dies eine praktikable Lösung.
Habe ich es getestet mit iOS 4.3 und iOS 5.0.1 (auf einem Gerät).