Спасибо, 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.");
}
Olie,
я полагаю, что можно найти ответ на вопрос здесь:
https://devforums.apple.com/message/1135#1135
я предполагаю, что у Вас есть доступ к Форумам Разработчика по Apple.com:)
Здесь два примера, как использовать AudioSessionInitialize: http://www.restoroot.com/Blog/2008/12/25/audiosessioninitialize-workarounds/
Я следовал общей теории и заставил это работать http://inforceapps.wordpress.com/2009/07 / 08 / detect-mute-switch-state-on-iphone /
Подведем итоги: Включите короткий беззвучный звук. Время, сколько времени нужно, чтобы играть. Если выключить звук, воспроизведение звука будет намного короче, чем сам звук. Я использовал звук 500 мс, и если звук воспроизводился меньше этого времени, то был включен выключатель звука. Я использую аудиоуслуги для воспроизведения беззвучного звука (который всегда учитывает переключатель отключения звука). В этой статье говорится, что вы можете использовать AVAudioPlayer для воспроизведения этого звука. Если вы используете AVAudioPlayer, я предполагаю, что вам нужно настроить категорию AVAudioSession, чтобы обеспечить отключение звука, но я этого не пробовал.
Чтобы узнать состояние переключателя отключения звука и регулятора громкости, я написал эти две функции. Они идеальны, если вы хотите предупредить пользователя, прежде чем он попытается создать аудиовыход.
-(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;
}
-(BOOL)isDeviceMuted
{
CFStringRef state;
UInt32 propertySize = sizeof(CFStringRef);
AudioSessionInitialize(NULL, NULL, NULL, NULL);
AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &propertySize, &state);
return (CFStringGetLength(state) > 0 ? NO : YES);
}