Поиск общих устройств Bluetooth в пределах досягаемости - PullRequest
4 голосов
/ 29 июня 2011

Мы используем частный фреймворк iOSM BluetoothManager для простого эксперимента - чтобы найти доступные для обнаружения универсальные (не iOS) BT-устройства.Теперь только следующая строка возвращает устройства:

for(BluetoothDevice* device in [[BluetoothManager sharedInstance] pairedDevices])

К сожалению, она возвращает только спаренные устройства, что не совсем то, что мы хотим.Использование connectingDevices вместо pairedDevices не возвращает вообще никакого устройства.Итак, какие варианты мы должны иметь возможность обнаружить любое Bluetooth-устройство в пределах досягаемости?Я не думаю, что смогу использовать GameKit, потому что хочу обнаруживать устройства, не поддерживающие iOS.

Любые предложения приветствуются.

Ответы [ 4 ]

3 голосов
/ 17 июля 2012

Вам необходимо использовать BluetoothManager, чтобы включить Bluetooth, а затем включить сканирование по Bluetooth для удаленных устройств.

Зарегистрировав обратный вызов уведомления, вы получите обнаруженные устройства.Объект уведомления фактически является указателем на объект BluetoothDevice.

Получите указатель объекта BluetoothDevice, и оттуда вы можете получить имя, адрес или подключиться к удаленному устройству.

Здесь нет RSSI, вы можете увидеть полный список методовпросматривая файл BluetoothDevice.h.

Я написал полный пример, совместимый с iOS 5.1, здесь: http://www.pocketmagic.net/?p=2827

Удачи!

3 голосов
/ 09 декабря 2011

Я несколько дней возился с частной платформой, и получить список ближайших устройств довольно просто.

Сначала необходимо включить сканирование устройства с помощью:

[[BluetoothManager sharedInstance] setDeviceScanningEnabled:YES];

Если в радиусе действия находятся устройства, оно начнет публиковать BluetoothDeviceDiscoveredNotification уведомлений в центр уведомлений. Подпишитесь на них, и объект в NSNotification, доставленный обратному вызову, будет иметь тип BluetoothDevice *.

Я уверен, что BluetoothManager хранит где-нибудь обнаруженные устройства, но я просто бросил все в свой собственный NSMutableArray.

К сожалению, я до сих пор не понял, как на самом деле соединиться с устройством с помощью частного API.

0 голосов
/ 29 июня 2011

Класс GKSession , являющийся частью инфраструктуры GameKit, - это то, что вы ищете, поскольку он предоставляет возможность обнаруживать и подключаться к ближайшим устройствам iOS с помощью Bluetooth.

0 голосов
/ 29 июня 2011

Вместо того чтобы использовать частную платформу BluetoothManager, почему бы не использовать общедоступную платформу Game Kit, которая предоставляет несколько методов для поддержки обнаружения и подключения двух устройств через Bluetooth и обмена данными между ними (, и она не ограничивается только использованием в играх несмотря на название )

Здесь есть довольно обширное руководство .

Вы можете использовать встроенный GKPeerPickerController или управлять им самостоятельно с помощью следующего

// create a session on each of your devices
GKSession *session = [[GKSession alloc] initWithSessionID:@"uniqueSessionID" displayName:@"deviceDisplayName" sessionMode:GKSessionModePeer
// set the delegate on the session
session.delegate = self;

убедитесь, что вы используете один и тот же идентификатор сеанса на всех устройствах, но сделайте имя уникальным для устройства

затем реализуйте следующий метод делегата

- (void)session:(GKSession *)session peer:(NSString *)peerID didChangeState:(GKPeerConnectionState)state

и когда новые узлы объявляют себя с тем же идентификатором сеанса, это будет вызвано, и их состояние должно быть

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