A detecção do comutador de toque / silêncio / mudo do iPhone usando o AVAudioPlayer não está funcionando?
Tentei usar esses métodos na tentativa de detectar se a opção Ring / Silent está ativa ou não:
Como detectar programaticamente a chave de mudo do iPhone?
categoria @AVAudioSession não está funcionando como determina a documentação
Mas no meu iPhone 4, o valor "state" é sempre "Speaker" (e o valor do comprimento retornado por CFStringGetLength (state) é sempre 7). Alguém já usou esse método com sucesso? Em caso afirmativo, em que tipo de dispositivo e versão do SDK?
Estou chamando assim:
- (BOOL)deviceIsSilenced {
CFStringRef state;
UInt32 propertySize = sizeof(CFStringRef);
OSStatus audioStatus = AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &propertySize, &state);
if (audioStatus == kAudioSessionNoError) {
NSLog(@"audio route: %@", state) // "Speaker" regardless of silent switch setting, but "Headphone" when my headphones are plugged in
return (CFStringGetLength(state) <= 0);
}
return NO;
}
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
audioSession.delegate = self;
[audioSession setCategory:AVAudioSessionCategoryAmbient error:nil];
[audioSession setActive:YES error:nil];
NSLog(@"muted? %i", [self deviceIsSilenced]);
...
}
Eu estava pensando que talvez algum outro evento (mais preciso) do kAudioSessionProperty seja acionado quando o comutador físico do telefone for ... comutado. Alguém tem alguma ideia
A propósito, estou usando a categoria AVAudioSessionCategoryAmbient com minha [AVAudioSession sharedInstance].
Atualizar Eu também tentei usar diferentes categorias de áudio e várias outras propriedades da sessão de áudio, nenhuma parece disparar quando o interruptor é desativado ou desativado. :
Jan. Atualização de 1 de 2014: É um pouco complicado, e encontrei uma falha ao executar multitarefas no meu iPhone 5S, mas o SoundSwitch biblioteca @ vinculada na nova resposta aceita é o caminho a seguir, se você deseja detectar a opção silenciosa. Até funciona no iOS 7.