Получить список устройств, подключенных к классическому Bluetooth (без BLE) [EAAccessoryManager]

Мне нужно сделать приложение, которое сможет сказать, подключен ли я в настоящее время к классическому устройству Bluetooth или нет (на самом деле это будет автомобильное устройство Bluetooth).

Мой первый шаг — рассказать, какие в настоящее время подключены классические устройства Bluetooth. Я не могу использовать CoreBluetooth, потому что он только для LE. Я пытаюсь использовать структуру External Accessory.

Вот код (кнопка запускает метод):

- (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.

Как я могу отобразить правильный номер?


person augustin    schedule 19.02.2016    source источник
comment
Кажется, что устройства Bluetooth, такие как обычная клавиатура и обычная гарнитура, не указаны в EAAcessoryManager.   -  person Larme    schedule 25.02.2016
comment
Да, я думаю, это потому, что устройство должно быть MFI, что может быть не так для обычных устройств Bluetooth. Решение, которое я нашел, заключалось в том, чтобы использовать [[AVAudioSession sharedInstance] availableInputs] для получения ввода Bluetooth, однако с этим решением я не могу получать уведомления в фоновом режиме (мне нужно было бы воспроизводить музыку, чтобы получить уведомление ).   -  person augustin    schedule 26.02.2016


Ответы (2)


Из документации Apple:

«Приложения, поддерживающие внешние аксессуары, должны правильно настроить свой файл Info.plist. В частности, вы должны включить ключ UISupportedExternalAccessoryProtocols, чтобы объявить конкретные аппаратные протоколы, поддерживаемые вашим приложением. Дополнительные сведения об этой платформе см. в разделе «Темы программирования внешних аксессуаров». здесь

Вам нужно добавить этот ключ в свой файл Info.plist с протоколом вашего устройства MFi.

<key>UISupportedExternalAccessoryProtocols</key>
<array>
    <string>your_protocol_name</string>
</array>

С уважением

person agscastaneda    schedule 17.03.2016

Вы не можете. Что вы можете сделать, так это проверить маршрут воспроизведения. Проблема в том, что в ваших автомобилях громкой связью будет 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"
person Teddy    schedule 17.03.2016