Empfangen von Benachrichtigungen mit der App im hintergrund-Modus
Habe ich eine app, die wird verfolgen alles, was die Benutzer tun, die in der iPod-app. Um dies zu tun, ich fügte hinzu, einige Beobachter zu NSNotificationCenter, wie MPMusicPlayerControllerNowPlayingitemdidchangenotification. Aber mein problem ist, bekomme ich nur die Benachrichtigungen, wenn die app im Vordergrund ist, wenn die in den hintergrund, das system fügt die Benachrichtigung in eine Warteschlange, und dann das nächste mal meine app wird aktiv, liefert er es mir. Ich habe kein Interesse in dieser Warteschlange, da ich möchte, zu erhalten Echtzeit-Benachrichtigungen.
Gibt es eine Möglichkeit für mich, um diese Benachrichtigungen auch wenn die app im angehaltenen Zustand? Ich will laufen nur 3 Zeilen code jedes mal bekomme ich diese NowPlayingItemDidChange Benachrichtigungen zum Beispiel.
Hier ist, wo ich hinzufügen, dass die Beobachter.
MPMusicPlayerController *iPodMediaPlayer = [MPMusicPlayerController iPodMusicPlayer];
NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
[notificationCenter addObserver: self selector: @selector(handle_NowPlayingItemChanged:) name:MPMusicPlayerControllerNowPlayingItemDidChangeNotification
object:iPodMediaPlayer];
[iPodMediaPlayer beginGeneratingPlaybackNotifications];
Auch, wenn ich eine andere Art von Objekt für den Beobachter statt der iPodMediaPlayer, die Beobachter nicht die Methode aufrufen.
Vielen Dank,
Abras
Du musst angemeldet sein, um einen Kommentar abzugeben.
iOS-Anwendungen werden angehalten, wenn Sie nicht im Vordergrund. Es gibt drei Ausnahmen von dieser Regel. Sie können code im hintergrund ausführen, wenn Ihre Anwendung ist
a) audio-Wiedergabe. Dies bedeutet, dass die Anwendung selbst ist eigentlich die Erzeugung von audio. Mein Verständnis ist, dass die MPMediaPlayerController iPodMusicPlayer Objekt steuert nur die Wiedergabe des externen iPod-Prozess, anstatt die audio-Wiedergabe von der app selbst. Vielleicht könnten Sie einigen Erfolg, wenn Sie angerufen applicationMusicPlayer statt iPodMusicPlayer und legen Sie die entsprechenden hintergrund-flags in Ihre Anwendungen Info.plist. Dies scheint, wie die meisten legitimen Weg, um Ihre Anwendung zu arbeiten, aber Sie wäre nicht in der Lage zur Steuerung der iPod-Wiedergabe von der iPod-app, nur die app und das system audio-Bedienelemente.
b) Holen Sie sich Ihre app zur überwachung der Lage. Wenn die app mit dem GPS, es kann weiterhin im hintergrund ausführen. Nachteil ist, dass die GPS-drain Akku, und die Benutzer möglicherweise werden creeped aus, dass Sie um Ihre Position.
c) Fragen UIApplication für zusätzliche Zeit. Wenn Sie UIApplication ist beginBackgroundTask Methode, Ihre Anwendung wird weiterhin ausgeführt, für eine begrenzte Zeit in den hintergrund. Wenn Ihre Benutzer sind gekommen, um in Ihrer Anwendung einmal alle zehn Minuten oder so, das könnte so gut funktionieren.
Hoffe, das hilft.
Multitasking in iOS ist derzeit sehr beschränkt ein. Sie können starten einer hintergrund-task mit
beginBackgroundTaskWithExpirationHandler:
Methode (der UIApplication-Objekt), aber es wird bestimmt bis zum Ende eine endliche Länge Aufgabe, bevor Sie gehen, ausgesetzt. Alle hintergrund-tasks können verfallen (und abgebrochen), bevor es beendet seine Arbeit. Sie können überprüfen, wie viel mehr Ihre Anwendung ausführen, indem Sie prüfenbackgroundTimeRemaining
- Eigenschaft des application-Objekts.Als ich hier erklärt iOS erhalten Media-Player-Benachrichtigungen, wenn app ist im hintergrund, scheint es keinen Weg, um Benachrichtigungen von iPodMusicPlayer.
Über Omar Raul Qazi Antwort:
a) ich habe versucht, und ich hatte keinen Erfolg. Die Musik lief immer weiter nach unten beim drücken der home-Taste. Ich denke, das hintergrund-flag funktioniert nur für normale AudioSessions und nicht für MPMusicPlayer...
b) ich bin nicht sicher, ob dies funktionieren würde und ich glaube nicht, dass Apple möchte, dass es bei der Suche nach Genehmigung
c) Sie kann im hintergrund laufen, nur die synchrone Aufgabe. Sie kann nicht warten, es für eine Meldung. Bin ich falsch?