0

Я хочу создать приложение с внутренней локализацией (я знаю, что Bluetooth не так точен, но грубых значений вначале достаточно). Моя проблема заключается в том, что я могу использовать маяки, которые я установил в помещении, в течение 10 секунд после включения и выключения Bluetooth. Странно то, что отключение Bluetooth и устранение проблемы (снова в течение 10 секунд).Проблемы с использованием CoreLocation и iBeacons

Вот фрагмент код моего простого тестового приложения:

-(void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region 
{ 
    BOOL beaconFound = NO; 
    for(CLBeacon *beacon in beacons) 
    { 
     if(beacon.proximity == CLProximityNear) 
     { 
      _textView.text = @"A Beacon is Near!"; 
      beaconFound = YES; 
     } 
    } 
    if(!beaconFound) 
     _textView.text = @"No Beacon is Near"; 
} 

Является ли это какое-то экономия энергии на прошивке? У меня нет никаких других объяснений, но, похоже, никто другой не имеет этой проблемы. Я также пробовал в моделировании iBeacon на iPad, но получил те же результаты.

Я хочу быть в состоянии, чтобы варьировать маяки постоянно, я делаю что-то неправильно?

Заранее спасибо

+0

Какие маяки вы используете? Я слышал о подобном поведении с некоторыми моделями. – davidgyoung

+0

Я использую маяки Kontakt. [link] (http://kontakt.io/) – crazykenny

+0

Проверьте этот связанный вопрос: http://stackoverflow.com/questions/21522383/problems-with-kontakt-io-beacons. Ваш опыт немного отличается, но оба предполагают, что с маяками может быть что-то неправильное. – davidgyoung

ответ

0

Я не уверен, что если вы делаете ранжирование на переднем или заднем плане. Я верю, что если вы делаете это в фоновом режиме, iOS позволит вам делать ранжирование в течение определенного периода времени до остановки locationManager.

Другое дело, что вы проверяете только CLProximityNear. Вы можете попробовать проверить три зоны. Я проверил startRangingBeaconsInRegion, и результат прыгал назад и вперед между Near and Far иногда Immediate. Надеюсь, эта помощь.

switch (beacon.proximity) { 
    case CLProximityImmediate: 
      _textView.text = @"A Beacon is Immediate!"; 
      beaconFound = YES; 
      break; 
    case CLProximityNear: 
      _textView.text = @"A Beacon is Near!"; 
      beaconFound = YES; 
      break; 
    case CLProximityFar: 
      _textView.text = @"A Beacon is Far!"; 
      beaconFound = YES; 
      break; 
    default: 
      break; 
} 
+0

Нет Я делаю диапазон на переднем плане. Я также попробовал решение, которое вы описали, но получил ту же проблему. Через 10 секунд я не могу использовать ни одного из моих 6 маяков. # – crazykenny

0

Попробуйте удалить этот спецификатор:

если (beacon.proximity == CLProximityNear)

Я подозреваю, что на расстоянии от маяка, как правило, возвращает другое значение (возможно, CLProximityFar или CLProximityImmediate). Если это правда, причина, по которой вы увидите результаты за первые 10 секунд, состоит в том, что за это время значение близости отскакивает вокруг большого количества. Это может привести к тому, что вы получите совпадения с CLProximityNear за это время до того, как будет определена оценка расстояния.

Смежные вопросы