iOS7 MPMusicPlayerController gibt einen Fehler an

8

Ich habe eine iOS7-Anwendung mit Musik-Player. Ich verwende den folgenden Code, um Änderungen des Wiedergabestatus von MPMusicPlayerController zu überprüfen, um die Benutzeroberfläche zu aktualisieren. Genauer gesagt schalte ich das Aussehen der Play-Taste zwischen Wiedergabe und Pause um.

%Vor%

Wenn ich die App auf iOS7 auf einem iPad oder iPhone starte, bekomme ich die folgende Sequenz statt nur einen einzigen Rückruf:

%Vor%

playbackState 2 bedeutet MPMusicPlaybackStatePaused und bewirkt, dass meine Anwendung den falschen Status in der Benutzeroberfläche anzeigt, während der Song tatsächlich wiedergegeben wird. Es macht keinen Sinn, dass der Callback 4 mal mit alternierenden Werten aufgerufen wird.

Dies tritt auf, wenn nur die Warteschlange geändert wird. Es sieht so aus, als ob das System die Warteschlange nicht ordnungsgemäß löscht.

Irgendwelche Ideen, wie man das löst?

    
swifferina 20.09.2013, 06:26
quelle

4 Antworten

4

Ich habe das gleiche Problem seit der Veröffentlichung von iOS 7 erlebt. Es ist definitiv ein Problem mit iOS; Es wird nicht nur ein falscher Wiedergabestatus angezeigt, sondern es werden auch gelegentlich Benachrichtigungen über die Änderung des Wiedergabezustands ( MPMusicPlayerControllerPlaybackStateDidChangeNotification ) nicht empfangen.

Ich habe den Fehler an Apple gemeldet und schlage vor, dass Sie dasselbe tun ( Apple Bug Reporter )

    
sooper 20.09.2013 11:13
quelle
4

Ich hatte das gleiche Problem. Ich habe diese Problemumgehung gefunden, anstatt playbackState zu verwenden, um zu überprüfen, ob das Audio wiedergegeben wird, habe ich diese Bedingung verwendet:

if([[AVAudioSession sharedInstance] isOtherAudioPlaying])

    
Hugo Vanderlei 18.02.2014 18:42
quelle
3

Eine andere Problemumgehung ist die Überprüfung:

%Vor%     
Hugo Vanderlei 19.02.2014 14:24
quelle
1

Die Problemumgehung hängt von der Implementierung der Rückrufe ab. Was ich getan habe, ist wie folgt:

(1) Unterdrückt die Rückrufe während des Warteschlangenwechsels. Somit habe ich einen BOOL-ivar doNotNoteNowPlayingItem . Ein beispielhafter Rückruf startet wie folgt:

%Vor%

Wenn ich also die Warteschlange ändere, hebe ich die Flagge, setze diesen ivar auf YES und lade ihn wieder herunter, wenn ich nowPlayingItem einstellen will und wieder bereit bin für Rückrufe. Andere Rückrufe würden ähnlich funktionieren.

(2) Benutze playbackState nicht als Test dafür, ob wir gegen Pause spielen. Die Antwort wird richtig sein, wenn wir gestoppt werden, aber wenn wir spielen, kann die Antwort als pausiert gemeldet werden. Um die Wiedergabe von der Pause zu unterscheiden, überprüfen Sie die currentPlaybackRate ; Wenn es nahe bei 1 ist, spielen wir, aber wenn es nahe bei 0 ist, sind wir pausiert.

    
matt 21.05.2014 02:12
quelle

Tags und Links