Получить список классических устройств, подключенных по Bluetooth (без BLE) [EAAccessoryManager]
Мне нужно создать приложение, которое сможет определить, подключен ли я в настоящее время к классическому устройству Bluetooth или нет (на самом деле это будет автомобильное устройство Bluetooth).
Мой первый шаг - рассказать, какие в настоящий момент подключены классические устройства Bluetooth. Я не могу использовать CoreBluetooth, потому что это только для LE. Я пытаюсь использовать платформу внешнего аксессуара.
Вот код (кнопка запускает метод):
- (IBAction)startMethodGetConnected:(id)sender {
NSLog(@"button taped");
// Get the number of accessories connected
NSUInteger NumberOfAccessoriesConnected = [[EAAccessoryManager sharedAccessoryManager].connectedAccessories count];
//Display the number
NSLog(@"number of accessories connected : %d", NumberOfAccessoriesConnected);
}
Я пытался, когда iPhone был подключен к клавиатуре Bluetooth, а также с гарнитурой Bluetooth. В обоих случаях консоль показывает, что число равно 0.
Как я могу отобразить правильный номер?
2 ответа
Из яблочной документации:
"Приложения, поддерживающие внешние аксессуары, должны обязательно правильно настроить свой файл Info.plist. В частности, вы должны включить ключ UISupportedExternalAccessoryProtocols, чтобы объявить конкретные аппаратные протоколы, поддерживаемые вашим приложением. Дополнительные сведения об этой платформе см. В разделе Темы программирования внешних аксессуаров". Вот
Вам необходимо добавить этот ключ в файл Info.plist вместе с протоколом вашего устройства MFi.
<key>UISupportedExternalAccessoryProtocols</key>
<array>
<string>your_protocol_name</string>
</array>
С уважением
Ты не можешь. Что вы можете сделать, это проверить маршрут воспроизведения. Проблема в том, что на вашей машине будет комплект громкой связи HeadsetBT. Это код, который я использую в своем приложении.
// create and set up the audio session
AVAudioSession* audioSession = [AVAudioSession sharedInstance];
[audioSession setDelegate:self];
[audioSession setCategory: AVAudioSessionCategoryPlayAndRecord error: nil];
[audioSession setActive: YES error: nil];
// set up for bluetooth microphone input
UInt32 allowBluetoothInput = 1;
OSStatus stat = AudioSessionSetProperty (kAudioSessionProperty_OverrideCategoryEnableBluetoothInput,
sizeof (allowBluetoothInput),
&allowBluetoothInput
);
NSLog(@"status = %x", stat); // problem if this is not zero
// check the audio route
UInt32 size = sizeof(CFStringRef);
CFStringRef route;
OSStatus result = AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &size, &route);
NSLog(@"route = %@", route);
// if bluetooth headset connected, should be "HeadsetBT"
// if not connected, will be "ReceiverAndMicrophone"