Обнаружение на iPhone переключателя «Звонок / Без звука / Отключение звука» с помощью AVAudioPlayer не работает?

Я пробовал использовать эти методы в попытке определить, активен ли переключатель «Звонок / Без звука»:

Как программно определить переключатель отключения звука iPhone?

AVAudioSession категория не работает, как того требует документация

Но на моем iPhone 4 значением «состояния» всегда является «Динамик» (а значение длины, возвращаемое CFStringGetLength (состояние), всегда равно 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.

31
задан Community 23 May 2017 в 12:34
поделиться