Pergunta

Estou usando o AVAudioPlayer classe para reproduzir arquivos .mp3 no meu aplicativo. É possível verificar se os fones de ouvido estão conectados ao dispositivo programaticamente?

Na primeira geração, os dispositivos iPod, a barra de controle de volume está oculta (para música e vídeos) quando nenhum fone de ouvido está conectado.

Foi útil?

Solução

Você pode obter a 'rota' de áudio atual ligando AudioSessionGetProperty com o kAudioSessionProperty_AudioRoute propriedade. Isso oferece uma string como "fone de ouvido" ou "alto -falante".

Você também pode usar AudioSessionAddPropertyListener Para ouvir quando a rota muda (por exemplo, desconectando os fones de ouvido)

Veja os documentos da Apple aqui

Outras dicas

AudiosessionGetProperty e AudiossessionAddPropertyListener estão depreciados no iOS 7.

Em vez disso, use: AVAudioSessionRouteChangeNotification

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleRouteChange:) name:AVAudioSessionRouteChangeNotification object:nil];

Ouvinte,

-(void)handleRouteChange:(NSNotification*)notification 
{
    NSInteger reason = [[[notification userInfo] objectForKey:AVAudioSessionRouteChangeReasonKey] integerValue];
    switch (reason) {
        case AVAudioSessionRouteChangeReasonOldDeviceUnavailable :
            break;
        case AVAudioSessionRouteChangeReasonNewDeviceAvailable :
            break;
        case AVAudioSessionRouteChangeReasonOverride :
            break;
        case AVAudioSessionRouteChangeReasonCategoryChange :
            break;
        case AVAudioSessionRouteChangeReasonWakeFromSleep :
            break;
        case AVAudioSessionRouteChangeReasonNoSuitableRouteForCategory :
            break;
        case AVAudioSessionRouteChangeReasonRouteConfigurationChange :
            break;
        case AVAudioSessionRouteChangeReasonUnknown:
        default:
            break;
    }
}

Existem duas abordagens:

1) Verifique o estado instantâneo da rota de áudio

Detecte se os fones de ouvido (não microfone) estão conectados a um dispositivo iOS

Esta resposta fornece um método pronto para detectar se os fones de ouvido estão conectados.

2) Monitore os eventos de mudança de rota e defina uma bandeira sempre que a rota muda entre o fone de ouvido e o não-foneteado

Como detectar programaticamente fones de ouvido no iPhone?

(Provavelmente gostaria de adicionar o código do primeiro link para determinar se o status do fone de ouvido/não-fone de ouvido foi alterado dentro do retorno de chamada de mudança de rota)

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