Я думаю, вы поняли использование этого свойства. Вы надеетесь включить/отключить динамик. Это не совсем цель kAudioSessionProperty_OverrideAudioRoute
. Скорее, это влияет на выходной звук маршрутизации, довольно ограниченным образом.
Это различные возможные выходные маршруты Avaiable на iPhone
extern const CFStringRef kAudioSessionOutputRoute_LineOut
extern const CFStringRef kAudioSessionOutputRoute_Headphones
extern const CFStringRef kAudioSessionOutputRoute_BluetoothHFP
extern const CFStringRef kAudioSessionOutputRoute_BluetoothA2DP
extern const CFStringRef kAudioSessionOutputRoute_BuiltInReceiver
extern const CFStringRef kAudioSessionOutputRoute_BuiltInSpeaker
extern const CFStringRef kAudioSessionOutputRoute_USBAudio
extern const CFStringRef kAudioSessionOutputRoute_HDMI
extern const CFStringRef kAudioSessionOutputRoute_AirPlay
Это только можно маршруты - то, что на самом деле имеется контекстно-зависимой. Apple строго ограничивает вашу способность определять эти маршруты в приложении, так как это то, что пользователь должен контролировать в соответствии с устройством. Большинство из них определяются неявным образом при подключении/отключении оборудования (наушники, USB, HDMI, линейный выход), и Apple не хочет, чтобы ваше приложение было бесполезно с ожиданиями пользователей здесь.
Airplay можно выбрать с помощью MPVolumeView
's routeButton
, если контекст мультимедиа верен (и доступен для трансляции). Bluetooth можно руководствоваться OverrideCategoryEnableBluetoothInput
(which controls both input and output)
В частности, обратите внимание, что kAudioSessionOutputRoute_BuiltInReceiver
находится динамик низкого уровня на iPhone вы держите к уху, когда сделать телефонный звонок. Это маршрут вывода звука по умолчанию для iPhone, если внешнее устройство (например, наушники) не подключено. kAudioSessionOutputRoute_BuiltInSpeaker
- громкий динамик громкой связи в нижней части телефона.
Вы можете изменить маршрут от того, что ток по умолчанию для этого BuiltInSpeaker
, установив одно из этих свойств переопределения:
key: kAudioSessionProperty_OverrideAudioRoute
values: kAudioSessionOverrideAudioRoute_Speaker
: kAudioSessionOverrideAudioRoute_None
Определяет, будет ли переопределить нормальное аудио маршрута звуковой сессии категории в.
key: kAudioSessionProperty_OverrideCategoryDefaultToSpeaker
values: TRUE
: FALSE
Указывает, следует ли маршрут аудио на динамик (вместо того, чтобы приемник), когда нет другого аудио маршрута, например, гарнитуру, не подключена.
Оба эти устройства предназначены только для использования в категории аудиозаписей kAudioSessionCategory_PlayAndRecord
.
Обратите внимание, что в обоих случаях вы не выбираете ни один из выходных маршрутов, вы только переопределяете «маршрут по умолчанию» в пользу встроенного (громкоговорящего) динамика.
iPad, не имеющий телефона, не имеет типа динамика BuiltInReceiver
. Это маршрут по умолчанию, при отсутствии подключенных гаджетов или трансляции, это то же самое BuiltInSpeaker
. Поэтому переопределение не имеет никакого эффекта.
Предполагая, что вы действительно пытаетесь отключить звук в своем приложении, как вы это достигаете, это зависит от многих других аспектов вашего дизайна приложения. Если вы хотите отключить устройство , Apple предпочла бы, чтобы пользователь контролировал его с помощью переключателя «звонок/тихий». Кажется, у них не было бы другого пути:
У меня был ответ от Apple на это. Они сказали, что они этого не делают и никогда не предоставляли метод обнаружения аппаратного переключателя отключения звука и не намерены это делать.https://stackoverflow.com/a/8009073/1375695
«Установки динамика является overide для устройства, а не для данного звука»
http://lists.apple.com/archives/coreaudio-api/2009/Mar/msg00300.html
'AudioSessionSetProperty' имеет возвращаемое значение, вы это проверить? – Sulthan
Да, возвращает 'OSStatus = 0' только –
Каково возвращаемое значение вызова setCategory? И, если это НЕТ, относительная ошибка – LombaX