Начиная с iOS 6, рекомендуемый подход для этого будет использовать AVAudioSession
(API на основе C AudioSession
устарел с iOS 7).
let currentRoute = AVAudioSession.sharedInstance().currentRoute
currentRoute
возвращает AVAudioSessionRouteDescription
, очень простой класс с двумя свойствами: inputs
и outputs
. Каждый из них является необязательным массивом AVAudioSessionPortDescriptions
, который предоставляет нам необходимую информацию о текущем маршруте:
if let outputs = currentRoute?.outputs as? [AVAudioSessionPortDescription] {
// Usually, there will be just one output port (or none), but let's play it safe...
if let airplayOutputs = outputs.filter { $0.portType == AVAudioSessionPortAirPlay } where !airplayOutputs.isEmpty {
// Connected to airplay output...
} else {
// Not connected to airplay output...
}
}
portType
- это полезная информация здесь ... см. AVAudioSessionPortDescription
документы для констант AVAudioSessionPort...
, которые описывают каждый тип порта ввода / вывода, например, линейный вход / выход, встроенный в динамиках, Bluetooth LE, микрофоне гарнитуры и т. д.
Кроме того, не забудьте отреагировать на изменения маршрута, подписавшись на AVAudioSessionRouteChangeNotification
.