Один из способов, который приходит мне в голову, это то, что вы можете использовать Core Bluetooth
API для доступа к аэродромам через Bluetooth. Но это может быть излишним, когда вы можете использовать AVSession. Я не знаю, почему именно вы хотите обнаружить только аэродромы и никаких других наушников Bluetooth. Но я думаю, что buildInMic
означает встроенный микрофон внутри устройства, а не устройство Bluetooth: P Если вы посмотрите на документы , вы увидите это: P
Вы не просили другую гарнитуру Bluetooth, но в качестве ответа я предоставлю вам этот код, он должен работать для гарнитур без MFI, подключенных к iPhone через Bluetooth.
Теперь к части Airpod.
Возможно, вы хотите использовать ExternalAccessory.framework
для связи с Bluetooth-устройствами MFI, такими как Airpods. ~~
Я еще не работал с EAAccessory
, но я считаю, что вы должны сделать что-то вроде этого:
- Создать экземпляр
EAAccessoryManager
- Используйте этот экземпляр для получения подключенных устройств
- Найти аэродромы по некоторому идентификатору
- Выясните, как проверить, подключен ли аксессуар, но это должно быть просто.
Также очень важным шагом является добавление UISupportedExternalAccessoryProtocols
в ваш файл info.plist
Я немного устал, поэтому, если у вас есть какие-либо вопросы, завтра я напишу реализацию здесь, если никто не будет быстрее.
Хорошо, очевидно, мой ответ был совершенно неверным.
Сегодня я узнал, что Airpods не указаны в устройствах Apple MFI , поэтому ExternalAccessorymanager, очевидно, не будет работать. Как указано в ответе, упомянутом в нижнем колонтитуле, все, что вам нужно сделать, это добавить категорию в AVSession.
Итак, весь код в основном здесь: D
let session = AVAudioSession.sharedInstance()
try! session.setCategory(.playAndRecord, mode: .default, options: .allowBluetooth)
guard let availableInputs = session.availableInputs else { return }
for input in availableInputs {
if input.portType == .bluetoothHFP {
// Do your stuff...
}
}
доказать:
2019-01-04 02:32:13.462093+0100 Accessory games[24578:5411208] [avas] AVAudioSessionPortImpl.mm:56:ValidateRequiredFields: Unknown selected data source for Port Butcher’s AirPods (type: BluetoothHFP)
(lldb) po availableInputs
▿ 2 elements
- 0 : <AVAudioSessionPortDescription: 0x283b401b0, type = MicrophoneBuiltIn; name = iPhone Mikrofon; UID = Built-In Microphone; selectedDataSource = Vpředu>
- 1 : <AVAudioSessionPortDescription: 0x283b40250, type = BluetoothHFP; name = Butcher’s AirPods; UID = 10:94:BB:5D:5F:F7-tsco; selectedDataSource = (null)>
(lldb) po availableInputs[1].portName
"Butcher’s AirPods"
(lldb) po availableInputs[1].portType
▿ AVAudioSessionPort
- _rawValue : BluetoothHFP
(lldb)
Извините за недопонимание и написание совершенно оффтопного ответа. Но, по крайней мере, вы знаете что-то о внешних аксессуарах:)
Также вы можете посмотреть здесь