Verificando os fones de ouvido conectados ao dispositivo programaticamente?
-
19-09-2019 - |
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.
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)