2016-03-25 4 views
0

Я пытаюсь использовать устройство iOS в качестве маяка (скажем, моего iPhone5), который должен быть обнаружен другими устройствами iOS, скажем, (мой iPad). Когда оба устройства находятся на переднем плане, мой iPad способен правильно определить маяковый сигнал, созданный моим iPhone. Из моего didRangeBeacons метод делегата, я сделалЭто возможно обнаружить источник фона маяка, сгенерированный устройством iOS.

func locationManager(manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], inRegion region: CLBeaconRegion) { 
     if beacons.count > 0{ 
      print(beacons) 
     } 
} 

я зарегистрировал информацию радиомаяка

[CLBeacon (uuid:<__NSConcreteUUID 0x124e483b0> AD065817-291B-4422-BD59-CBBFBDB81F17, major:9, minor:6, proximity:2 +/- 0.81m, rssi:-56)] 

Когда мой iPhone (маяк) в фоновом режиме (экран не активен), я не могу для обнаружения любого маякового сигнала от моего iPad, есть ли какое-либо решение для этого сценария? Я провел много исследований в Интернете, но я не мог найти то, что освещается.

ответ

0

Мониторинг маяков работает, когда приложение находится в фоновом режиме, поскольку iOS выполняет эту службу для приложения. Однако ранжирование работает только тогда, когда приложение находится на переднем плане. Если кратковременного фонового диапазона недостаточно, вам необходимо включить опцию «Фоновые режимы» на вкладке «Возможности» ваших настроек проекта и использовать UIBackgroundModes для location в вашем Info.plist.

0

Да, вы можете использовать маяк в фоновом режиме. Обычно IOS только позволяет сделать это в течение 10 секунд после того, как вы идете на задний план, однако, вы можете использовать этот код, чтобы продлить свое фоновое просыпается время до 3 минут:

func extendBackgroundRunningTime() { 
    if backgroundTask != UIBackgroundTaskInvalid { 
     // if we are in here, that means the background task is already running. 
     // don't restart it. 
     return 
    } 
    NSLog("Attempting to extend background running time") 
    var self_terminate: Boolean = true 
    self.backgroundTask = UIApplication.sharedApplication().beginBackgroundTaskWithName("DummyTask", expirationHandler: {() -> Void in 
     NSLog("Background task expired by iOS") 
     if self_terminate != nil { 
      UIApplication.sharedApplication().endBackgroundTask(backgroundTask) 
      self.backgroundTask = UIBackgroundTaskInvalid 
     } 
    }) 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {() -> Void in 
     NSLog("Background task started") 
     while true { 
      NSLog("background time remaining: %8.2f", UIApplication.sharedApplication().backgroundTimeRemaining) 
      NSThread.sleepForTimeInterval(1) 
     } 
    }) 
} 

Вы на самом деле не нужны фоновые режимы для этого. Вам нужно установить NSLocationAlwaysUsageDescription в info.plist. Ваш телефон будет располагаться в любом из CLBeaconRegions, который вы его выбрали. Мне нравится использовать this app для тестирования с iBeacons, потому что он обеспечивает имитацию и обнаружение, хотя есть много приложений симулятора маяка, или вы можете купить настоящий ibeacon.

Я бы постарался использовать диапазон в фоновом режиме как можно более экономно, потому что этот процесс может быть интенсивным, если это сделано чрезмерно. Попытайтесь использовать мониторинг в ситуациях, когда вам не нужно знать такие вещи, как Proximity и RSSI, которые предоставляются через ранжирование, чтобы сохранить время автономной работы.

0

Мониторинг маяков хорошо работает как на переднем плане, так и на заднем плане. Мониторинг

Мониторинг региона позволяет вашему приложению знать, когда устройство входит или выходит из диапазона маяков, определенных регионом. Представьте себе музей с приложением аудиогида и маяками, установленными двумя входами. Приложение отслеживает регион, охватывающий оба маяка (подумайте: «регион всех маяков») и уведомляется каждый раз, когда пользователь входит в музей. Затем он запускает уведомление, напоминающее пользователям о функции аудиогида.

Ранжирование

Хотя мониторинг позволяет обнаруживать движение в-и-из диапазона маяков, Ранжирование более зернистая. Он возвращает список маяков в радиусе действия, а также приблизительную близость к каждому из них. Возвращаясь к нашему примеру в музее: представьте себе «все маяки возле экспонатов». Приложение аудиогида может сканировать для всех маяков в этом регионе, а затем проверить, какой маяк ближайший. Поскольку каждый маяк связан с конкретным экспонатом, приложение будет воспроизводить описание художественных работ, относящихся к контексту пользователя.

Ranging работает только при запуске приложения, которое в большинстве случаев означает, что пользователь активно использует приложение. Это также означает, что для этого требуется только разрешение на «Доступ к вашему местоположению во время использования приложения».

Если вы уверены, что вам нужен постоянный фон для маяков, вам необходимо активировать функцию «Фоновые режимы» для вашего приложения - в частности, режим «Обновления местоположений».

Обратите внимание, что для работы в фоновом режиме startRangingBeaconsInRegion вам также потребуется запустить Стандартные обновления местоположения через startUpdatingLocation CLLocationManager (что означает, что в приложении вам нужен как CLLocationManager, так и ESTBeaconManager).

Примечание: в iOS 9 вам также необходимо установить для свойства allowBackgroundLocationUpdates вашего CLLocationManager значение true.

(from community.estimote.com) https://community.estimote.com/hc/en-us/articles/203914068-Is-it-possible-to-use-beacon-ranging-in-the-background-

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