Получить список классических устройств, подключенных по 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"
Другие вопросы по тегам