2016-03-25 8 views
0

Ich versuche ein iOS-Gerät als Beacon zu verwenden (sagen wir mein iPhone5), das von einem anderen iOS-Gerät erkannt werden soll (mein iPad). Wenn beide Geräte im Vordergrund sind, kann mein iPad das von meinem iPhone generierte Beacon-Signal korrekt erkennen (). Aus meiner didRangeBeacons Delegatmethode habe ichEs ist möglich, eine von einem iOS-Gerät generierte Hintergrund-Beacon-Quelle zu erkennen

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

ich die Bake info

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

Wenn mein iPhone (das Leuchtfeuer) in einem Hintergrundmodus (der Bildschirm ist nicht aktiv) angemeldet, ich bin nicht fähig um irgendein Beacon-Signal von meinem iPad zu erkennen, gibt es eine Lösung für dieses Szenario? Ich habe online viel recherchiert, aber ich konnte nichts finden, was aufschlussreich ist.

Antwort

0

Die Überwachung für Beacons funktioniert, wenn sich eine App im Hintergrund befindet, weil iOS diesen Dienst für die App ausführt. Die Auswahl funktioniert jedoch nur, wenn die App im Vordergrund ist. Wenn die kurzfristige Hintergrundentfernung nicht ausreicht, müssen Sie die Option Hintergrundmodi auf der Registerkarte Funktionalität Ihrer Projekteinstellungen aktivieren und UIBackgroundModes in Info.plist auf location setzen.

0

Ja, Sie können ein Beacon im Hintergrund anzeigen. Normalerweise iOS können Sie nur diese 10 Sekunden lang tun, nachdem Sie in den Hintergrund rücken, jedoch können Sie diesen Code verwenden, um Ihren Hintergrund wach Zeit bis zu 3 Minuten zu verlängern:

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) 
     } 
    }) 
} 

Sie eigentlich nicht brauchen Hintergrundmodi dafür. Sie müssen NSLocationAlwaysUsageDescription in info.plist festlegen. Ihr Telefon wird alle CLBeaconRegions, nach denen Sie suchen, umgrenzen. Ich verwende gerne this app, um mit iBeacons zu testen, weil es Simulation und Erkennung bietet, obwohl es viele Beacon-Simulator-Apps gibt, oder Sie können eine tatsächliche Ibeacon kaufen.

Ich würde versuchen, Bereich im Hintergrund so sparsam wie möglich zu verwenden, weil dieser Prozess batterieintensiv sein kann, wenn im Übermaß. Versuchen Sie, das Monitoring in Situationen zu verwenden, in denen Sie nicht über Proximity und RSSI Bescheid wissen müssen, die durch das Ranging bereitgestellt werden, um die Akkulaufzeit zu schonen.

0

Monitoring Beacons funktioniert sowohl im Vordergrund als auch im Hintergrund gut. Überwachung

Wenn Sie eine Region überwachen, kann Ihre App wissen, wann ein Gerät in den Bereich der von der Region definierten Beacons ein- oder aussteigt. Stellen Sie sich ein Museum mit einer Audio-Guide-Anwendung und Beacons an den beiden Eingängen vor. Die App überwacht eine Region, die beide Beacons umfasst (denke an "alle Eingangsbaken") und wird benachrichtigt, sobald der Benutzer das Museum betritt. Dann wird eine Benachrichtigung gestartet, die Benutzer an die Audio-Guide-Funktion erinnert.

Ranging

Während Überwachung ermöglicht Bewegung in-and-out den Bereich der Baken zu erfassen, ist Ranging mehr körnig. Es gibt eine Liste von Leuchtfeuer in Reichweite zurück, zusammen mit einer geschätzten Nähe zu jedem von ihnen. Kommen wir zurück zu unserem Museumsbeispiel: Stellen Sie sich eine "alle Leuchttürme in der Nähe der Exponate" Region vor. Die Audioguide-App kann nach allen Beacons in dieser Region suchen und dann prüfen, welches Beacon am nächsten ist. Da jeder Beacon einem bestimmten Exponat zugeordnet ist, spielt die App eine Beschreibung eines für den Kontext des Nutzers relevanten Artworks ab.

Die Rangierung funktioniert nur, wenn die App ausgeführt wird. In den meisten Fällen bedeutet dies, dass der Benutzer die App aktiv verwendet. Dies bedeutet auch, dass es nur die Erlaubnis benötigt, "auf Ihren Standort zuzugreifen, während Sie die App benutzen".

Wenn Sie sicher sind, dass Sie einen dauerhaften Hintergrund für Beacons benötigen, müssen Sie die Hintergrundmodi-Funktion für Ihre Anwendung aktivieren, insbesondere den Modus für Standortaktualisierungen.

Hinweis: Damit startRangingBeaconsInRegion im Hintergrund ausgeführt werden kann, müssen Sie Standard-Standort-Updates auch über CLLocationManager startUpdatingLocation starten (dh Sie benötigen in Ihrer App sowohl einen CLLocationManager als auch einen ESTBeaconManager).

Hinweis: In iOS 9 müssen Sie außerdem die Eigenschaft allowsBackgroundLocationUpdates Ihres CLLocationManager auf true setzen.

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

Verwandte Themen