Это возможно, протестировав аудио-маршрут NULL с помощью AudioToolBox:
UInt32 routeSize = sizeof (CFStringRef);
CFStringRef route;
AudioSessionGetProperty (
kAudioSessionProperty_AudioRoute,
&routeSize,
&route
);
if (route == NULL) {
NSLog(@"Silent switch is on");
}
Если для маршрута задано значение NULL, то нет доступных аудиовыходов. Если это «Гарнитура» или «Наушники», то беззвучный звонок может быть включен. Однако он никогда не будет включен, если для него установлено значение «Динамик».
Вы, вероятно, лучше всего тестируете это в своем слушателе свойства изменения маршрута аудио, который установлен ниже:
AudioSessionAddPropertyListener (
kAudioSessionProperty_AudioRouteChange,
audioRouteChangeListenerCallback,
self
);
Примечание. Если вы делаете что-то необычное, например переопределение звуковых маршрутов, этот ответ может не применяться.
Настройка и разрыв аудиосеанса во всей полноте, вероятно, выходят за рамки этого ответа.