Смотрите мой ответ ниже, такую ​​же функциональность как 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.

Ответы на вопрос(7)

Ваш ответ на вопрос