Une partie du code dans d'autres réponses (y compris la réponse acceptée) ne peut fonctionner si vous n'êtes pas en mode ambiant, où est respecté le commutateur muet.
J'ai écrit la routine ci-dessous pour passer en mode ambiant, lire le commutateur, puis revenir aux paramètres dont j'ai besoin dans mon application.
-(BOOL)muteSwitchEnabled {
#if TARGET_IPHONE_SIMULATOR
// set to NO in simulator. Code causes crashes for some reason.
return NO;
#endif
// go back to Ambient to detect the switch
AVAudioSession* sharedSession = [AVAudioSession sharedInstance];
[sharedSession setCategory:AVAudioSessionCategoryAmbient error:nil];
CFStringRef state;
UInt32 propertySize = sizeof(CFStringRef);
AudioSessionInitialize(NULL, NULL, NULL, NULL);
AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &propertySize, &state);
BOOL muteSwitch = (CFStringGetLength(state) <= 0);
NSLog(@"Mute switch: %d",muteSwitch);
// code below here is just restoring my own audio state, YMMV
_hasMicrophone = [sharedSession inputIsAvailable];
NSError* setCategoryError = nil;
if (_hasMicrophone) {
[sharedSession setCategory: AVAudioSessionCategoryPlayAndRecord error: &setCategoryError];
// By default PlayAndRecord plays out over the internal speaker. We want the external speakers, thanks.
UInt32 ASRoute = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,
sizeof (ASRoute),
&ASRoute
);
}
else
// Devices with no mike don't support PlayAndRecord - we don't get playback, so use just playback as we don't have a microphone anyway
[sharedSession setCategory: AVAudioSessionCategoryPlayback error: &setCategoryError];
if (setCategoryError)
NSLog(@"Error setting audio category! %@", setCategoryError);
return muteSwitch;
}
si je connecte la valeur de l'ambiance après, je serai toujours retourné 1634558569 peu importe si je suis coupé ou non. Une idée? –
Ne semble pas fonctionner sur iOS 8. –
"Ne fonctionne pas" comment? Qu'est-ce que tu as fait? Qu'espériez-vous arriver? Qu'est-il arrivé, à la place? Si vous fournissez plus d'informations, je vais essayer de mettre à jour ma réponse. Merci! – Olie