2013-11-24 5 views
2

Я использую комплект разработчика Nordic BLE nRF8001 для тестирования CoreBluetooth. Использование методов CBCentralManager (например, didDiscoverPeripheral(), didConnectPeripheral() и т. Д.) мой iPhone 5 способен обнаруживать рекламные объявления Nordic и подключаться к нему просто отлично. Тем не менее, я не получаю никакого ответа от новых методов locationManager или regionMonitoring. Ниже я объясню свою настройку:locationManager: метод didRangeBeacons не обнаруживает устройство BLE

1.) Сначала я получил свой NSUUID от моего устройства Nordic в методе делегирования didDiscoverPeripheral() с использованием переданного в периферийном устройстве (моего северного устройства). Между прочим, я создал специальный сервис для моего скандинавского устройства, поэтому предположим, что это периферийное устройство является скандинавским устройством. Чтобы получить NSUUID я использовал:

NSUUID *uuid = [peripheral identifier]; 
    NSString *uuidString = [uuid UUIDString]; //uuidString = 9A8D4C73-152D-BBDA-E4C2-9CE952654645 

2.) Далее я создаю область радиомаяка для моего скандинавского устройства и создать CLLocationManager:

self.locationManagerBeacon = [[CLLocationManager alloc] init]; 
    [self.locationManagerBeacon setDelegate:self]; 
    NSUUID *myUUID = [[NSUUID alloc] initWithUUIDString:@"9A8D4C73-152D-BBDA-E4C2-9CE952654645"]; 
    self.beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:myUUID 
                 identifier:@"nordicRegion"]; 
    self.beaconRegion.notifyEntryStateOnDisplay = YES; 

3.) Теперь я начало мониторинга для региона радиомаяка

[self.locationManagerBeacon startRangingBeaconsInRegion:self.beaconRegion]; 

4.) Проблема: locationManager: didRangeBeacons: inRegion получает вызывался, а область маяков всегда пусто.

Вопрос: Должно ли быть настроено устройство Nordic BLE определенным образом, чтобы новые методы маяка locationManager обнаружали его (например, частота рекламы BLE, уровень мощности и т. Д.)? Если да, может кто-нибудь указать мне на документацию.

Цените помощь!

+0

Итак, глупый вопрос: вы используете фактический iBeacon? Или просто произвольное устройство BTLE? Только BTLE-устройство, передающее профиль iBeacon, действительно будет рассматриваться как «iBeacon». –

+0

Интересно, можете ли вы поделиться своим кодом конфигурации/профиля/образца для настройки рекламы nrf8001 в качестве iBeacon. – joshperry

ответ

6

Я всегда считал, что для того, чтобы использовать маяк в диапазоне вы должны сначала начать мониторинг радиомаяка:

[theLocManager startMonitoringForRegion: region1]; 
[theLocManager startRangingBeaconsInRegion: region1]; 

Этот код прекрасно работает для меня (плюс, как вы, я также установил notifyEntryStateOnDisplay = YES).

Попробуйте это и посмотрите, не изменилось ли это. В противном случае я бы сказал, что у вас что-то не так в пакете BLE, который вы вещаете, чтобы служить рекламой маяка.

Возможно, вы также попробуете загрузить демоверсию AirLocate от Apple (которая будет прослушивать маяки и превратить ваше устройство iOS в маячок.) Вы можете использовать AirLocate, чтобы узнать, распознает ли оно ваше пользовательское устройство BLE в качестве маяка. Если это так, используйте AirLocate для передачи в качестве маяка и посмотрите, распознает ли ваш код.

+0

В структуре рекламной структуры BLE возникла проблема - хороший звонок. Для кого-либо еще с этой проблемой, пожалуйста, обратитесь к этому [сообщению] (http://stackoverflow.com/questions/18906988/what-is-the-ibeacon-bluetooth-profile). – CaseyG

+0

Увы, голоса всегда оцениваются за хорошие ответы. :) –

0

я обнаружил, что иногда имея пустую строку (@ "") в качестве идентификатора вызовет такую ​​же про

region = [[CLBeaconRegion alloc] initWithProximityUUID:UUID identifier:[UUID UUIDString]]; 

Хотелось бы надеяться, что помогает

Z.

0

Благодаря Duncan для комментирования о «что-то не так в пакете BLE». Я использовал несколько маяков Estimote, которые я купил некоторое время назад. Я также возвращал пустой массив. Когда я подключился к ним с помощью приложения Estimote iOS, он показал, что Операционная система Estimote устарела. Я использовал приложение для обновления маяков, и они начали появляться для меня в массиве.

0

По моему опыту, есть несколько вещей, которые могут пойти не так, если вы следовали инструкциям Дункана и по-прежнему не работает:

  • CLBeaconRegion, что вы создаете должны иметь уникальные идентификаторы, если вы мониторинг нескольких регионов. Если они не уникальны, тогда будет вызываться didRangeBeacons, который будет пустым маяком.
  • Не следует звонить startMonitoringForRegion и startRangingBeaconsInRegion в блок dispatch_async.
  • Если он по-прежнему не работает, проверьте в своей реализации centralManagerDidUpdateState, что вы сбросили контроль, когда увидите CBCentralManagerStatePoweredOn.
Смежные вопросы