Я думаю, мне удалось это решить - оказалось, что это не имеет ничего общего с моим приложением, а скорее с приложением iPod.Мое приложение подчиняется переключателю отключения звука, как и должно, когда iPod не воспроизводится, а затем позволяет iPod проигрывать поверх него - все, что я хотел.Тем не менее, когда проигрывается iPod, приложение перестает реагировать на выключение звука, поэтому я думаю, что это просто то, что iPod делает с настройками звука устройства.Я мог бы, вероятно, обойти это, если бы я действительно хотел тратить на это время, но пока он подчиняется выключателю звука, когда iPod не играет, это достаточно хорошо для меня.
РЕДАКТИРОВАТЬ:Чтобы обойти это, просто используйте эту функцию, чтобы определить, включен ли переключатель отключения звука вручную, и не воспроизводите свои звуки, если результат - ДА.Хотя может быть немного больно, если у вас нет класса централизованного управления звуком.Было бы неплохо, если бы Apple могла опубликовать это поведение в своей документации.
- (BOOL)deviceIsSilenced
{
#if TARGET_IPHONE_SIMULATOR
// return NO in simulator. Code causes crashes for some reason.
return NO;
#endif
CFStringRef state;
UInt32 propertySize = sizeof(CFStringRef);
AudioSessionInitialize(NULL, NULL, NULL, NULL);
AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &propertySize, &state);
return (CFStringGetLength(state) <= 0);
}