2015-06-03 6 views
6

Ich habe die folgende Situation in meiner Anwendung:Wie kann MPMusicPlayerController nicht abgespielt werden, wenn die Anwendung vom Benutzer beendet wird?

ich ein Musiksystem in meiner Anwendung habe und ich MPMusicPlayerController Musik zu spielen; Alles funktioniert bis jetzt gut.

Mein Problem: Wenn ein Benutzer Musik in meiner Anwendung beginnt zu spielen und nach einiger Zeit beendet, Musik kann nicht gestoppt werden, weil ich das [MPMusicPlayerController systemMusicPlayer]-Objekt bin. Ich weiß, dass es eine andere Option gibt, die applicationMusicPlayer ist, aber es hört auf, Musik im Hintergrund zu spielen, die meinen Anforderungen nicht entspricht.

Wie kann ich die Wiedergabe von Musik stoppen, wenn die Anwendung vom Benutzer beendet wird?

Ich habe einige Codes, den es in applicationWillTerminate: zu stoppen versucht, aber es funktioniert nur in einigen Situationen:

  1. Wenn ich nach Hause Taste zweimal drücken und die App aus der Multitasking-Benutzeroberfläche beenden, dann der App kann den Musikplayer stoppen.

  2. Wenn ich die Home-Taste einmal drücke und dann auf den Home-Bildschirm gehe, und danach drücke ich die Home-Taste zweimal und beende die Anwendung, dann kann es meinen Musik-Player nicht stoppen.

Ich hat versucht, einen Haltepunkt in applicationWillTerminate: aber im zweiten Beispiel zu setzen (von oben), die Anwendung abgestürzt und meinen Code nicht ausgeführt werden, anders als in der ersten Situation.

UPDAT

Und ich weiß, dass, wenn ich MPMusicPlayerController Hintergrund Modus ist nicht erforderlich, da es Musik in der einheimischen Musik-Player startet.

Jede Hilfe würde geschätzt.

+0

Haben Sie versucht, 'Audio' zu' UIBackgroundModes' hinzuzufügen? –

+0

@ Sega-Zero, wenn Sie Musik über MPMusicPlayerController spielen benötigt es nicht die Hintergrund-Modi –

+0

@chiragshah Ich habe genau das gleiche Problem - wie hast du das gelöst? http: // Stapelüberlauf.com/questions/42331852/quitting-app-verursacht-error-message-from-debugger-termined-due-to-signal-9 – wayneh

Antwort

3

Leider ist Ihre einzige Option, basierend auf Ihren Anforderungen, das Abspielen von Audio mit Ihrer eigenen App, zB AVAudioPlayer, und stellen Sie die Audio-Hintergrund-Modus-Anforderung ein.

Da es keine Möglichkeit gibt, eine Benachrichtigung zu erhalten, wenn Ihre App vom Betriebssystem oder vom Benutzer beendet wird, sind Sie nicht in der Lage, das System oder den Anwendungs-Player von Ihrem Prozess abzuhalten.

Die Registrierung für NSUncaughtExceptionHandler wird weder SIGKILL noch SIGSTOP erfassen, so dass Sie sich nicht auf den System-Musik-Player verlassen können.

Dies sollte jedoch kein Problem sein, da es einfach ist, Audiowiedergabe in Ihrer App einzurichten. Wenn Sie den Systemplayer verwenden, damit der Benutzer seine eigene Musik wiedergeben kann, sollten Sie eine Auswahlfunktion verwenden und auf ihre Musikbibliothek zugreifen, damit sie die Musik auswählen können.

+0

sollten Sie eine Demo für diese haben, weil mir nicht bekannt ist, wie man in AVAudioPlayer –

+0

Songs abspielen Klar, ich werde meine Antwort aktualisieren. Bitte erläutern Sie zuerst, was Sie spielen möchten, woher der Ton kommt usw.? Zum Beispiel, wenn der Benutzer ein Lied aus seiner Bibliothek auswählt, oder wenn Sie dem Benutzer eine Liste von Liedern präsentieren, aus denen er auswählen kann, um zu spielen, sind die Lieder auf einem Server usw.? – jarryd

+0

Benutzer kann das Lied wählen, das im Musikspieler nur ist –