2016-02-25 5 views
1

Я хочу направить IOS VoiceOver звук для наушников, даже если он не подключен.IOS Audio Force Выход только разъем для гарнитуры

Другими словами, в то время как мое приложение открыто, VoiceOver звук (и другие звуки играли мной в приложении, использующем AVSpeechUtterance и т. д.), НИКОГДА не должно идти к динамикам, но должно выйти из гарнитуры, если подключено.

Может ли кто-нибудь предложить что-нибудь по этому поводу?

ответ

1

По-видимому, невозможно принудительно направлять звук на наушники, если аксессуар не подключен к разъему для наушников (который активирует физический переключатель для прямого голоса на наушники).

Я достиг своей цели, используя следующий код (в Swift), который направляет VoiceOver и другие звуки в динамик телефона (откуда мы слушаем телефонные звонки) и замалчивает громкоговоритель, когда мое приложение находится на переднем плане.

let session: AVAudioSession = AVAudioSession.sharedInstance() 
do { 
    try session.setCategory(AVAudioSessionCategoryPlayAndRecord) 
    try session.overrideOutputAudioPort(AVAudioSessionPortOverride.None) 
    try session.setActive(true) 
} catch { 
    print("Couldn't override output audio port") 
} 
1

Устройства iOS не будут включать гнездо для гарнитуры для аудиовыхода, если в гнездо не подключено головное устройство (наушники) или наушники (соответствующие импеданс и т. Д.).

Звук VoiceOver всегда будет подключаться к гарнитуре, если действительный подключен и не перегружен.

+0

Благодарим за отзыв. Моя фактическая проблема заключается в том, чтобы заблокировать звук от перехода к громкоговорителю, когда гарнитура не подключена, что я достиг в настоящее время, направляя звук на громкоговоритель телефона (откуда вы слушаете телефонный звонок) из громкоговорителя во время работы моего приложения. Я использовал следующий код: 'let session: AVAudioSession = AVAudioSession.sharedInstance() try session.setCategory (AVAudioSessionCategoryPlayAndRecord) try session.overrideOutputAudioPort (AVAudioSessionPortOverride.None) try session.setActive (true)' – Maverick