Ich habe zwei Tage damit verbracht und bin nicht weitergekommen. Ich versuche [MPMusicPlayerController applicationMusicPlayer] zu verwenden, um Audio aus der iPod-Bibliothek des Benutzers abzuspielen und es im Hintergrund laufen zu lassen sowie Remote-Ereignisse zu unterstützen. Jetzt ist es einfach, die Musik tatsächlich zu spielen. Holen Sie sich die Instanz, wählen Sie die Songs, weisen Sie die Musik-Queue zu und spielen Sie. Gemacht und gemacht. ABER ... a) Ich kann es nicht im Hintergrund spielen lassen, und b) selbst wenn ich im Vordergrund bin, kann ich die Fernsteuerungsereignisse überhaupt nicht funktionieren lassen!
Und bevor Sie fragen, ja, habe ich die plist-Einträge, die Audio-Session-Kategorie, den Anruf, um zu sagen, dass ich an entfernten Ereignissen interessiert bin, eingerichtet und einen Ersthelfer eingerichtet, der auf sie wartet, also bitte, ja Ich habe jedes einzelne Dokument zu diesem Thema gelesen, das ich finden konnte * (* eine Aufgabe, die ich Apple vorwerfe, weil es zu diesem Thema überhaupt nicht klar ist, noch irgendeinen Beispielcode dafür!) Und ich habe jeden gesehen eines der WWDC-Videos, die damit in Zusammenhang stehen (sogar das Einfrieren des Bildschirms, um den Code genau aus ihrem Beispiel zu kopieren ...), so dass ich etwas nicht in dieser Liste verpasst habe, mit einer dieser Antworten antwortend wird nicht helfen.
Noch eine Sache ... Ich spreche ausdrücklich von der Verwendung des MPMusicPlayerControllers, der laut den Dokumenten niemals eine Anwendungssitzung verwendet. Es verwendet immer die Systemsitzung. (Vielleicht beantwortet das selbst meine Frage, aber die Dokumente sagen das nicht klar, also bin ich mir nicht sicher, daher diese Frage.)
Das sagte nach zwei Tagen meine Gedanken sind:
Wenn Sie den MPMusicPlayerController verwenden, unabhängig davon, welche Methoden Sie aufrufen oder welche PLIST-Einträge Sie festlegen, wird Ihre App niemals im Hintergrund ausgeführt. Zeitraum. Wenn Sie die ipodMusicPlayer-Instanz verwenden, wird die Musik weiter abgespielt, aber das liegt daran, dass nicht die App, sondern der iPod wiedergegeben wird. Wenn du stattdessen die applicationMusicPlayer-Instanz verwendest, hört deine Musik im Hintergrund auf. In beiden Fällen ist Ihre App gesperrt.
Unabhängig davon, ob Sie die ipodMusicPlayer- oder applicationMusicPlayer-Instanzen verwenden, werden alle Remote-Ereignisse zur iPod-Anwendung selbst und nicht von Ihnen selbst übertragen, auch wenn Sie explizit danach gefragt haben. Wenn Sie die applicationMusicPlayer-Instanz verwenden und die Fernbedienung zum Auswählen von "Play" verwenden, empfängt die iPod-App den Befehl, sodass Ihr Audio ausgeblendet wird und unterbrochen wird und die Wiedergabe in der iPod App beginnt. Wenn Sie stattdessen den ipodMusicPlayer gewählt haben, spielt es natürlich keine Rolle, wie Sie ausdrücklich gesagt haben, dass Sie im Grunde nur daran interessiert sind, die iPod App fern zu steuern, die wiederum die Remote-Ereignisse empfängt.
Das Symbol in den Quick-Switch-Steuerelementen unten ändert sich nie zum Symbol Ihrer App, da Ihre App nie wieder so eingerichtet ist, dass sie die Ereignisse empfängt. Die iPod-Anwendung ist, weshalb ihr Symbol dort erscheint.
Also was ich wissen will ist ... lieg ich hier falsch? Ist jemand erfolgreich in der Lage gewesen, MPMusicPlayerController zu verwenden und die Remote-Ereignisse abzufangen? Während ich den ApplicationMusicPlayer mit Hintergrundmusik-Unterstützung bevorzugen würde, damit ich nicht mit dem iPod des Benutzers mucke, ist das größere Ding Fernsteuerungsbenachrichtigungen, was bedeutet, wenn ich das ipodMusicControl verwenden muss und meine App im Vordergrund behält, um diese abzufangen Nachrichten, so sei es. Es ist so hässlich, aber es ist zumindest etwas.
Codebeispiele oder zumindest explizite Schritte gegen eine der integrierten App-Vorlagen würden sehr geschätzt werden. (Brauche nicht einmal die Implementierung ... nur die Schritte. Hoffentlich wird das das unvermeidliche 'Es ist immer noch unter NDA'-Sache, mit dem die Leute weiterhin Fragen beantworten, beschwichtigen.)
Markieren
Ich habe es gelöst. Die Info ist in meiner anderen Frage hier drüben ...
Stapelüberlauf: Wiedergabe von iPod-Musik bei Empfang von Fernsteuerungsereignissen
... aber die kurze Version ist, Sie müssen AVPlayer (aber nicht AVAudioPlayer. Keine Ahnung, warum das ist!) mit der Asset-URL aus dem MPMediaItem aus der Bibliothek verwenden und dann die Audio-Session-Kategorie auf Playable setzen ( Aktivieren Sie NICHT die Option zum Kombinieren!) und fügen Sie der Datei info.plist die entsprechenden Schlüssel hinzu, um dem Betriebssystem mitzuteilen, dass Ihre App Hintergrundaudio unterstützen soll.
Damit können Sie Elemente aus Ihrer iPod-Bibliothek wiedergeben (mit Ausnahme von Audible.com-Dateien aus irgendeinem Grund!) und weiterhin entfernte Ereignisse erhalten. Zugegeben, Sie müssen mehr arbeiten, und da dies ist Ihr Audio-Player, getrennt von, und wird die iPod-App zu unterbrechen (die möglicherweise wünschenswert oder nicht wünschenswert. Und wieder, aktivieren Sie nicht mischen oder die iPod-App wird die entführen Fernsteuerungsereignisse), aber das sind die Pausen!
Für alle, die es wissen wollen, habe ich herausgefunden, dass das Audiosignal im Hintergrund abgespielt wird. Sie müssen die Audio-Session-Kategorie auf "Abspielbar" einstellen und dann funktioniert das Hintergrundaudio gut. Wenn Sie auch eigene Sounds gleichzeitig spielen möchten, müssen Sie die Kategorie als mischbar markieren. Das hat den Hintergrundmusikteil gelöst. Aber was ich herausgefunden habe, ist jedes Mal, wenn der iPod abgespielt wird, scheint es nicht möglich zu sein, entfernte Benachrichtigungen zu erhalten.
Hier ist der aktualisierte Thread ...
M
Tags und Links ios4 ipod remote-control mpmusicplayercontroller background-application