Поиск обычных Bluetooth-устройств в пределах досягаемости

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

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

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

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


person Kar    schedule 29.06.2011    source источник
comment
Я должен пояснить, что я ищу способ перечислить ближайшие обнаруживаемые стандартные (не iOS) устройства.   -  person Kar    schedule 29.06.2011


Ответы (3)


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

Во-первых, вы должны включить сканирование устройства, используя:

[[BluetoothManager sharedInstance] setDeviceScanningEnabled:YES];

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

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

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

person Stoph    schedule 08.12.2011
comment
Итак, означает ли это, что для того, чтобы приложение могло обнаруживать устройства, его нужно взломать? - person Kar; 14.12.2011
comment
Нет, вы просто не сможете отправить свое приложение в магазин, поскольку Apple не разрешает частные фреймворки. Хороший пост для начала работы с фреймворком находится здесь: stackoverflow.com/a/1892077/1088502 - person Stoph; 14.12.2011
comment
Насколько я понимаю, программа разработчика за 99 долларов позволяет создавать специальные сборки на телефоне разработчика. Но если бы я распространял его среди конечных пользователей, нужно ли было взламывать их телефоны? - person Kar; 14.12.2011
comment
Я еще не пробовал распространять это, поэтому я не уверен, но я не верю, что их нужно будет взламывать. Однако имейте в виду, что, поскольку это неопубликованный API, он может измениться в любой момент, поэтому ваше приложение может выйти из строя в любое время при обновлении ОС. - person Stoph; 14.12.2011
comment
Да, программа за 99 долларов позволяет создавать специальные сборки. Однако любое устройство, на котором оно работает, должно быть в специальном файле обеспечения. На портале подготовки можно зарегистрировать не более 100 устройств. На самом деле это не вариант для чего-то большего, кроме распространения среди тестировщиков / рецензентов и т. Д. - person Craig B; 20.08.2012

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

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

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

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

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

Удачи!

person radhoo    schedule 16.07.2012
comment
Вы когда-нибудь обновляли это для последних версий iOS? Начиная с iOS 8 или около того, это больше не работает. - person Nate; 16.01.2016
comment
Привет, NAte, к сожалению, недавно у меня не было времени вернуться к этому. - person radhoo; 17.01.2016

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

person werner    schedule 29.06.2011
comment
Но я думаю, что GK не позволяет вернуть список обнаруживаемых устройств в пределах досягаемости. Правильно? - person Kar; 29.06.2011
comment
да, вы можете: сеанс GKSessionModeClient ищет локальные устройства, объявляющие тот же идентификатор сеанса. Обнаружив доступные и совместимые узлы, он вызывает метод делегата session: peer: didChangeState:. Уловка состоит в том, чтобы использовать GKSessionModeClient и GKSessionModeServer и держаться подальше от GKSessionModePeer. - person werner; 29.06.2011
comment
Я думаю, что GKSession работает, если обнаруживаемые устройства являются устройствами iOS, но не обычными устройствами, верно? - person Kar; 29.06.2011
comment
вопрос заключается в поиске обнаруживаемого универсального (не для iOS). Игровой комплект позволяет взаимодействовать только с другими устройствами iOS. - person radhoo; 16.07.2012