2016-09-19 3 views
0

Я разрабатываю приложение, где мне нужно обновить местоположение устройства на сервере примерно точно, я могу позволить себе разницу в 500 | 700 метров в данных.Ограничение областиMonitoring для приложения iOS

Я успешно смогу достичь его в фоновом режиме и переднем плане. Моей главной задачей является обновление местоположения, когда приложение завершено, поскольку я выполнил значительные изменения местоположения при завершении работы приложения, но он уведомляет устройство об изменении местоположения случайным образом и очень неточно или существует огромная задержка в обновлении местоположения, иногда я получать обновления мест в 2-3 км и иногда даже на расстоянии 7 км.

Таким образом, один из членов моей группы предложил мне реализовать мониторинг региона при завершении работы приложения, теперь я реализовал мониторинг региона, но он также не работает должным образом, и я прочитал где-то там может быть максимум 20 регионов, которые можно контролировать из приложения.

Вот ниже пример кода, я пробовал:

import UIKit 
import CoreLocation 
import XCGLogger 
//import SwiftLocation 

// MARK: - AppDelegate 

@UIApplicationMain 
class AppDelegate: UIResponder, UIApplicationDelegate, CLLocationManagerDelegate 
{ 
    var window: UIWindow? 
    var locationManager: CLLocationManager! 
    var currentLocation: CLLocationCoordinate2D? 

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool 
    { 

    if launchOptions != nil 
    { 
     if (launchOptions![UIApplicationLaunchOptionsLocationKey] != nil) 
     { 

     if let location = locationManager.location?.coordinate { 
      startRegionMonitoring(location) 

     } 
     } 
    } 

    setupLocalNotifications() 
    setupLocationManager() 
    return true 
    } 

    func setupLocationManager() 
    { 
    if (locationManager == nil) 
    { 
     locationManager = CLLocationManager() 
     locationManager.delegate = self 
     locationManager.pausesLocationUpdatesAutomatically = false 
     locationManager.distanceFilter = CLLocationDistance(100.0) 
     locationManager.desiredAccuracy = kCLLocationAccuracyBest 
     locationManager.requestAlwaysAuthorization() 

     if #available(iOS 9.0, *) { 
     locationManager.allowsBackgroundLocationUpdates = true 
     } 
    } 
    } 

    func applicationWillTerminate(application: UIApplication) 
    { 
    if currentLocation == nil 
    { 

     return 
    } 

    // create a region around current location and monitor enter/exit 
    startRegionMonitoring(currentLocation!) 
    } 

    func startRegionMonitoring(location: CLLocationCoordinate2D) 
    { 
    let region = CLCircularRegion(center: location, radius: 100.0, identifier: "manish") 
    region.notifyOnExit = true 
    region.notifyOnEntry = true 
    locationManager.startMonitoringForRegion(region) 

    } 

    // MARK: - Local notifications 

    func setupLocalNotifications() 
    { 
    let settings = UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil) 
    UIApplication.sharedApplication().registerUserNotificationSettings(settings) 
    } 

    func showLocalNotification(message: String) 
    { 

    let localNotification = UILocalNotification() 
    localNotification.alertBody = message; 
    localNotification.fireDate = NSDate(timeIntervalSinceNow: 1.0) 
    UIApplication.sharedApplication().scheduleLocalNotification(localNotification) 

    } 
} 

extension AppDelegate 
{ 
    func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) 
    { 
    if status == .AuthorizedAlways { 
     locationManager.startUpdatingLocation() 
    } 
    } 

    func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) 
    { 
    currentLocation = locations.first?.coordinate 
    showLocalNotification("didUpdateLocations: \(currentLocation)") 
    } 

    func locationManager(manager: CLLocationManager, didEnterRegion region: CLRegion) 
    { 
    showLocalNotification("Entered region: \(region.identifier)") 

    } 

    func locationManager(manager: CLLocationManager, didExitRegion region: CLRegion) 
    { 
    showLocalNotification("Exited region: \(region.identifier)") 
    if let location = manager.location?.coordinate { 
     startRegionMonitoring(location) 
    } 
    } 

} 

Как я могу обновить местоположение, даже если приложение завершается? В моем коде выше ничего плохого?

ответ

0

Включить фоновое обновление. Вы можете обновлять местоположение внутри своего приложения.

http://solutionowl.com/background-app-refresh-explained-in-laymans-terms/

+0

мне нужно обновление местоположения, а приложение завершается. Если бы вы могли предоставить некоторую помощь с кодами и описанием здесь, это было бы очень полезно. –

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