J'ai essayé d'utiliser ces méthodes pour tenter de détecter si le commutateur Ring/Silent est actif ou non :
Comment détecter par programmation le commutateur de sourdine de l'iPhone ?
La catégorie AVAudioSession ne fonctionne pas comme le veut la documentation
Mais sur mon iPhone 4, la valeur "state" est toujours "Speaker" (et la valeur de longueur renvoyée par CFStringGetLength(state) est toujours 7). Quelqu'un a-t-il utilisé cette méthode avec succès ? Si oui, sur quel type d'appareil et quelle version du SDK ?
Je l'appelle comme ça :
- (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]);
...
}
Je pensais que peut-être un autre événement (plus précis) kAudioSessionProperty est déclenché lorsque l'interrupteur physique du téléphone est ... activé. Quelqu'un a une idée ?
Au fait, j'utilise la catégorie AVAudioSessionCategoryAmbient avec mon [AVAudioSession sharedInstance].
Update: J'ai également essayé d'utiliser différentes catégories d'audio, et une poignée d'autres propriétés de session audio, mais aucune ne semble fonctionner lors de la désactivation ou de la désactivation du commutateur.
1er janvier 2014 Mise à jour : C'est un peu un hack, et j'ai rencontré un crash alors que je faisais du multitâche avec sur mon iPhone 5S, mais les SoundSwitch La bibliothèque liée dans la nouvelle réponse acceptée est la voie à suivre si vous voulez détecter le commutateur silencieux. Elle fonctionne même sous iOS 7.