Frage

In meiner App, die auf iOS 6 ausgeführt wird, scheint alles mit Audio gut zu funktionieren. Ich benutze das alte C API -Format, um Unterbrechungen mit einem Rückruf zu fangen. Einrichten über: AudioSessionInitialize(NULL, NULL, interruptionListenerCallback, (__bridge void *)self) Und es war großartig. Mit iOS 7 SDK scheint mein Unterbrechungsaufruf nie aufgerufen zu werden, wenn das Gerät Anrufe empfängt oder ein Alarm ausfällt.

Nachdem ich mich umgesehen hatte, hörte ich, dass die alte C -API veraltet war und dass Sie zu den neueren Avaudiosession -Funktionen wechseln sollten. Weitere Lesungen ergab, dass der Avaudiosession -Delegierter veraltet ist und dass Sie die verwenden sollten NSNotification zum AVAudioSessionInterruptionNotification Unterbrechungen zu fangen und alles zu tun, was getan werden muss.

Für mich scheint es, dass diese Benachrichtigung nie wirklich abgefeuert wird und ich daher nie richtig unterbrochen werde, was dann nach dem Ende des Anrufs alle meine Audio -Sachen bricht.

Ich melde mich für die Benachrichtigung wie so an:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(AudioInterruption:) name:AVAudioSessionInterruptionNotification object:nil];

Im Moment die AudioInterruption: Funktion protokolliert einfach, dass es abgefeuert wurde. Weder das Protokoll noch die Haltepunkte auslösen.

Um klar zu sein, funktioniert die Audio -Wiedergabe und -aufnahme zunächst einwandfrei. Wenn eine Unterbrechung auftritt (z. B. ein eingehender Anruf oder ein Alarm), wird keine Unterbrechungsbenachrichtigung abgefeuert. Wenn mehr umgebende Code erforderlich ist, lassen Sie es mich wissen.

War es hilfreich?

Lösung

Hast du ein AvcaptureSession Instanz in Ihrer Bewerbung?
Wenn dies der Fall ist, würde ich die gleiche Antwort vorschlagen, die ich für meine verlinkte Frage erhalten habe:
Versuchen Sie zu setzen NEIN zum useApplicationAudiosession Eigentum Ihres AvcaptureSession Beispiel.
Es ist eine Eigenschaft, die seit iOS 7 verfügbar ist. In den vorherigen iOS -Versionen jeweils AvcaptureSession benutzte einen privaten Avaudiosession. Seit iOS 7 nutzen die Capture -Sitzungen die Avaudiosession der gemeinsam genutzten Anwendung.
Das useApplicationAudiosession Die Eigenschaft ist standardmäßig aktiviert. Wenn Sie also das alte Verhalten beibehalten möchten, müssen Sie es deaktivieren, indem Sie einstellen NEIN.

Ich hoffe, das wird auch für Sie funktionieren.

Andere Tipps

Sie haben die AvaudioSession -Instanz in Ihrem Addobserver -Anruf nicht als letzter Parameter übergeben.

Versuche dies:

AVAudioSession *session = [AVAudioSession sharedInstance];

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(AudioInterruption:)
                                             name:AVAudioSessionInterruptionNotification
                                           object:session];

Für mich hat das Aktivieren von Audiositzungen und das Hinzufügen von Beobachtern, wenn der Benutzer die Wiedergabetaste tatsächlich auf dem Spielfeld gedrückt hat, das Problem behoben. Benachrichtigung wurde abgefeuert. Ich denke, Apple Doc sagt etwas darüber hier.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top