Смотрите мой ответ ниже, такую же функциональность как VSSilentSwitch в формате с открытым исходным кодом
ытался использовать эти методы, чтобы определить, активен ли переключатель «Звонок / Без звука»:
Как программно определить выключатель звука iPhone?
Категория AVAudioSession не работает, как того требует документация
Но на моем iPhone 4 значением «state» всегда является «Speaker» (а значение длины, возвращаемое CFStringGetLength (state), всегда равно 7). Кто-нибудь успешно использовал этот метод? Если да, то на каком устройстве и версии SDK?
Я называю это так:
- (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]);
...
}
Я думал, может быть, какое-то другое (более точное) событие kAudioSessionProperty происходит, когда физический коммутатор на телефоне ... переключается. У кого-нибудь есть идеи?
Кстати, я использую категорию AVAudioSessionCategoryAmbient с моим [AVAudioSession sharedInstance].
Обновить: Я также попытался использовать разные аудио категории и несколько других свойств аудио сеанса, но ни один из них не срабатывает при выключении / выключении звука. :(
1 января 2014 г. Обновление: Это что-то вроде хака, и я столкнулся со сбоем во время многозадачности с ним на моем iPhone 5S, ноSoundSwitch Библиотека, связанная с новым принятым ответом, - это путь, если вы хотите обнаружить тихий переключатель. Это даже работает в iOS 7.