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

44
задан Honey 24 May 2019 в 21:05
поделиться

6 ответов

Спасибо, JPM. Действительно, ссылка, которую Вы предоставляете, приводит к корректному ответу (в конечном счете.;) Для полноты (потому что S.O. должен быть источником БЫСТРЫХ ответов!)...

// "Ambient" makes it respect the mute switch
// Must call this once to init session
if (!gAudioSessionInited)
{
    AudioSessionInterruptionListener    inInterruptionListener = NULL;
    OSStatus    error;
    if ((error = AudioSessionInitialize (NULL, NULL, inInterruptionListener, NULL)))
    {
        NSLog(@"*** Error *** error in AudioSessionInitialize: %d.", error);
    }
    else
    {
        gAudioSessionInited = YES;
    }
}

SInt32  ambient = kAudioSessionCategory_AmbientSound;
if (AudioSessionSetProperty (kAudioSessionProperty_AudioCategory, sizeof (ambient), &ambient))
{
    NSLog(@"*** Error *** could not set Session property to ambient.");
}
29
ответ дан Olie 26 November 2019 в 22:11
поделиться

Olie,

я полагаю, что можно найти ответ на вопрос здесь:

https://devforums.apple.com/message/1135#1135

я предполагаю, что у Вас есть доступ к Форумам Разработчика по Apple.com:)

3
ответ дан jpm 26 November 2019 в 22:11
поделиться

Здесь два примера, как использовать AudioSessionInitialize: http://www.restoroot.com/Blog/2008/12/25/audiosessioninitialize-workarounds/

1
ответ дан catlan 26 November 2019 в 22:11
поделиться

Я следовал общей теории и заставил это работать http://inforceapps.wordpress.com/2009/07 / 08 / detect-mute-switch-state-on-iphone /

Подведем итоги: Включите короткий беззвучный звук. Время, сколько времени нужно, чтобы играть. Если выключить звук, воспроизведение звука будет намного короче, чем сам звук. Я использовал звук 500 мс, и если звук воспроизводился меньше этого времени, то был включен выключатель звука. Я использую аудиоуслуги для воспроизведения беззвучного звука (который всегда учитывает переключатель отключения звука). В этой статье говорится, что вы можете использовать AVAudioPlayer для воспроизведения этого звука. Если вы используете AVAudioPlayer, я предполагаю, что вам нужно настроить категорию AVAudioSession, чтобы обеспечить отключение звука, но я этого не пробовал.

4
ответ дан 26 November 2019 в 22:11
поделиться

Чтобы узнать состояние переключателя отключения звука и регулятора громкости, я написал эти две функции. Они идеальны, если вы хотите предупредить пользователя, прежде чем он попытается создать аудиовыход.

-(NSString*)audioRoute
{
    CFStringRef state;
    UInt32 propertySize = sizeof(CFStringRef);
    OSStatus n = AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &propertySize, &state);
    if( n )
    {
        // TODO: Throw an exception
        NSLog( @"AudioSessionGetProperty: %@", osString( n ) );
    }

    NSString *result = (NSString*)state;
    [result autorelease];
    return result;
}

-(Float32)audioVolume
{
    Float32 state;
    UInt32 propertySize = sizeof(CFStringRef);
    OSStatus n = AudioSessionGetProperty(kAudioSessionProperty_CurrentHardwareOutputVolume, &propertySize, &state);
    if( n )
    {
        // TODO: Throw an exception
        NSLog( @"AudioSessionGetProperty: %@", osString( n ) );
    }
    return state;
}
5
ответ дан 26 November 2019 в 22:11
поделиться
-(BOOL)isDeviceMuted
{
 CFStringRef state;
 UInt32 propertySize = sizeof(CFStringRef);
 AudioSessionInitialize(NULL, NULL, NULL, NULL);
 AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &propertySize, &state);
 return (CFStringGetLength(state) > 0 ? NO : YES);
}
5
ответ дан 26 November 2019 в 22:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: