Пример минимального iOS BluetoothManager - PullRequest
5 голосов
/ 20 марта 2012

Я создавал минимальный пример для обнаружения близлежащих устройств Bluetooth с помощью частной платформы BluetoothManager в iOS 5.0.

Используя ответ, найденный в этом вопросе: Поиск общих устройств Bluetooth в пределах досягаемости

Вот мой метод viewDidLoad для регистрации для BluetoothAvailabilityChangedNotification.Я также регистрируюсь на BluetoothDeviceDiscoveredNotification.

[[NSNotificationCenter defaultCenter]
    addObserver:self
    selector:@selector(bluetoothAvailabilityChanged:)
    name:@"BluetoothAvailabilityChangedNotification"
    object:nil];

btCont = [BluetoothManager sharedInstance];

[[NSNotificationCenter defaultCenter]
    addObserver:self
    selector:@selector(deviceDiscovered:)
    name:@"BluetoothDeviceDiscoveredNotification"
    object:nil];

Когда я получаю уведомление об изменении доступности Bluetooth, я включаю сканирование устройства включенным, как описано в одном из ответов в вышеупомянутой ссылке.

- (void)bluetoothAvailabilityChanged:(NSNotification *)notification
{
    NSLog(@"BT State: %d", [btCont enabled]);
    [btCont setDeviceScanningEnabled:YES];
}

Для полноты рассмотрим метод уведомления deviceDiscovered.

- (void)deviceDiscovered:(NSNotification *) notification
{
    NSLog(@"Discovered one!");
}

Журналы, созданные при запуске тестового приложения, выглядят следующим образом:

BTM: attaching to BTServer
BTM: posting notification BluetoothAvailabilityChangedNotification
BT State: 1
BTM: setting device scanning enabled

К сожалению, телефон не 't вообще не подхватывает Bluetooth-устройства, хотя я знаю, что есть ближайшие обнаруживаемые устройства (проверено с помощью устройства Android).

Некоторые вещи, которые я уже пробовал:

  • Вызов [btCont setPowered: YES];и регистрируясь для соответствующего уведомления об изменении состояния питания, выполняя setDeviceScanningEnabled: YES в обратном вызове
  • Вызов [btCont resetDeviceScanning] до вызова setDeviceScanningEnabled
  • Вызов scanForConnectableDevices: (unsigned int): unsigned int;метод, предполагающий, что arg1 может быть своего рода значением тайм-аута.Я пробовал разные значения, но безуспешно.

Любые мысли будут высоко оценены.Спасибо!

Ответы [ 2 ]

2 голосов
/ 20 марта 2013

Насколько я знаю, менеджер bluetooth получает список после того, как ОС отфильтровывает результаты. Вы получите только близлежащие устройства гарнитуры, а не все обычные устройства.

Вы должны использовать scanForServices:

    // start scan
    [btManager  setDeviceScanningEnabled:YES];
    [btManager scanForServices:0xFFFFFFFF];
0 голосов
/ 17 июля 2012

Вот способ сделать это: http://www.pocketmagic.net/?p=2827

Уведомление об обнаруженном устройстве является указателем на объект BluetoothDevice.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...