Pergunta

Então, no meu aplicativo, executando no iOS 6, tudo parece funcionar bem com o áudio. Eu uso o formato da API antiga C para capturar interrupções usando um retorno de chamada; Configurando via: AudioSessionInitialize(NULL, NULL, interruptionListenerCallback, (__bridge void *)self) E foi ótimo. Usando o iOS 7 SDK, parece que meu retorno de chamada de interrupção nunca é chamado quando o dispositivo recebe chamadas ou um alarme dispara.

Depois de alguns olhando em volta, ouvi dizer que a antiga API do C foi depreciada e que você deve se mudar para as novas funções de Avaudiosession. Mais leitura revelou que o delegado da Avaudiossession está depreciado e que você deve usar o NSNotification por AVAudioSessionInterruptionNotification para capturar interrupções e fazer o que precisar ser feito.

Para mim, parece que essa notificação nunca é realmente demitida e, portanto, nunca sou interrompida adequadamente, o que quebra todas as minhas coisas de áudio depois que a chamada terminar.

Eu me inscrevo para a notificação assim:

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

Por enquanto, o AudioInterruption: A função simplesmente registra que foi demitida. Nem o log nem os pontos de interrupção estão acionando.

Para ficar claro, inicialmente a reprodução e a gravação de áudio funcionam bem. Quando ocorre uma interrupção (como uma chamada de entrada ou alarme), nenhuma notificação de interrupção é disparada. Se for necessário mais código circundante, me avise.

Foi útil?

Solução

Você tem um AvcaptureSession instância em seu aplicativo?
Se for esse o caso, eu sugeriria a mesma resposta que recebi pela minha pergunta vinculada:
Tente definir NÃO para o usaPplicationaudiosession propriedade do seu AvcaptureSession instância.
É uma propriedade disponível desde o iOS 7. nas versões anteriores do iOS, cada uma AvcaptureSession fez uso de um particular Avaudiossession. Desde o iOS 7, as sessões de captura usam a Avaudiossession do aplicativo compartilhado.
o usaPplicationaudiosession A propriedade está ativada por padrão; portanto, se você deseja manter o comportamento antigo, deve desativá -lo, definindo NÃO.

Espero que isso funcione para você também.

Outras dicas

Você não passou na instância do Avaudiossession em sua chamada addobserver como o último parâmetro.

Experimente isso:

AVAudioSession *session = [AVAudioSession sharedInstance];

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

Para mim, ativar a sessão de áudio e adicionar observador quando o usuário realmente pressionar o botão de reprodução resolveu o problema; A notificação foi demitida. Eu acho que a Apple Doc diz algo sobre isso aqui.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top