Ich entwickle eine iPhone App, die Audio im Hintergrund abspielt. Ich möchte, dass der Ton weiter abgespielt wird, wenn der Benutzer den Bildschirm sperrt, aber pausiert, wenn er sich entscheidet, zu einer anderen App zu wechseln (durch Drücken der Home-Taste).
Auf iOS 4 gab es kein Problem, da die App bei gesperrtem Bildschirm in den inaktiven Zustand wechseln und nur in den Hintergrund verschoben werden würde, wenn die Home-Taste gedrückt wurde. Auf iOS 5, wenn der Bildschirm gesperrt ist, wird die App nun auch in den Hintergrund verschoben, so dass es scheinbar nicht mehr möglich ist, den Unterschied zwischen den beiden Zuständen zu erkennen. Gibt es eine Lösung für dieses Problem?
Sie können diese beiden Fälle unterscheiden, indem Sie die Eigenschaft applicationState
von UIApplication
überprüfen. Es wird auf UIApplicationStateInactive
für eine Anwendung gesetzt, die aufgrund des Sperrbildschirms den Hintergrund eingegeben hat, und andernfalls auf UIApplicationStateBackground
.
Loooking für UIApplicationState, wenn ApplicationDidEnterBackground ausgelöst wird, hat gut funktioniert. Leider wurde dies jetzt geändert.
Wenn ich meine App mit XCode5 kompiliere, um alle iOS7-Sachen zu unterstützen (aber immer noch Build-Ziel auf 5.0 gesetzt ist), gibt der Sperrbildschirm jetzt den Status UIApplicationStateBackground, wenn ich früher UIApplicationStateInactive bekommen habe.
Ich habe dies von Apple Support gefragt und sie haben bestätigt, so wird es ab jetzt funktionieren. Es gibt also keine Möglichkeit festzustellen, ob der Benutzer die Home- oder die Bildschirmsperre gedrückt hat. Das ist traurig, da ich wirklich einen guten Anwendungsfall hatte, um es zu erkennen.
PS. Meine App, die mit XCode 4 erstellt wurde, funktioniert auch auf iOS7 altmodisch.
Ich habe einen besseren Weg gefunden, dieses Ding zu machen.
Unterscheiden zwischen Bildschirmsperre und Home-Taste drücken Sie auf iOS7
Dies kann Ihnen sowohl bei iOS5 & amp; iOS6 & amp; iOS7 Gerät :) Aber es funktioniert nicht bei iOS Simulator.
Sie können [[UIApplication sharedApplication] applicationState]
abrufen, um zu entscheiden, ob es sich um einen Sperrbildschirm oder eine Home-Schaltfläche mit UIApplicationStateInactive
und UIApplicationStateBackground
vor iOS7 handelt.
Aber diese Dateien haben den gleichen Status UIApplicationStateBackground
auf iOS7, und Sie können dies anhand der Bildschirmhelligkeit beurteilen.
Die Bildschirmhelligkeit sollte 0 sein, wenn der Bildschirm gesperrt ist. Andernfalls ist es der Home-Button-Status.
Sie können das Code-Snippet in - (void)applicationDidEnterBackground:(UIApplication *)application
Es gibt eine Möglichkeit, dieses Verhalten zu erreichen, aber es gibt einen Vorbehalt. Sie müssen den Audio-Hintergrundmodus in Ihrer Info.plist einstellen und Multitasking für Ihre App deaktivieren.
Stellen Sie die Audio-Session-Kategorie auf AVAudioSessionCategoryPlayback:
%Vor%Fügen Sie in Ihrer Info.plist-Datei den Schlüssel "Erforderliche Hintergrundmodi" hinzu und fügen Sie den Punkt "App spielt Audio" ein. Dann fügen Sie den Schlüssel "Anwendung läuft nicht im Hintergrund" und setzen Sie es auf "Ja"
Jetzt schaltet der Sperrbildschirm Ihre App in den Audio-Hintergrundmodus (Audio läuft weiter), während Sie durch Drücken der Home-Taste Ihre App beenden (und den Ton stummschalten). Wenn der Nutzer von einer anderen App zu Ihrer App zurückkehrt, wird er erneut gestartet. Wenn Ihre App nicht zu lange zum Laden braucht und Sie nach dem Relaunch in den vorherigen Zustand zurückkehren können, könnte dies eine praktikable Lösung sein.
Ich habe es mit iOS 4.3 und iOS 5.0.1 (auf einem Gerät) getestet.
Tags und Links objective-c ios ios4 ios5