Her dakika bir geri arama işlevi çağıran bir zamanlayıcıya sahip olan aşağıdaki kodu yazdım. Uygulama arka plana gittiğinde, aynı geri çağrı yöntemini çağıran başka bir zamanlayıcıyı başlattım, ancak arka plan zamanlayıcı sadece üç dakika çalışıyor.Sunucuya konumu güncelleştirmek için arka planda sonsuza dek bir Swift 2.0 uygulaması çalıştırın
Apple'ın arka plan görevlerine yalnızca üç dakika izin verdiğini anlıyorum. Uygulamam, uygulamanın arka planda olduğu zamanlarda bile kullanıcının konumunu her dakika izleyen bir izleme uygulamasına benziyor. Bu nedenle, bu işlevi yerine getirmem gerekiyor.
beginBackgroundTaskWithExpirationHandler
'un kullanılacağını öğrendim, ancak uygulamamın doğru olup olmadığını bilmiyorum.
Not: Yer güncellemeleri için uygulama kayıtlarına geçmek için Gerekli arka plan modlarım var.
Herhangi bir çalışma kodu veya bağı çok takdir edilmektedir.
override func viewDidLoad() {
super.viewDidLoad()
timeInMinutes = 1 * 60
self.locationManager.requestAlwaysAuthorization()
self.locationManager.requestWhenInUseAuthorization()
if CLLocationManager.locationServicesEnabled() {
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters
locationManager.startUpdatingLocation()
}
var timer = NSTimer.scheduledTimerWithTimeInterval(timeInMinutes, target: self, selector: "updateLocation", userInfo: nil, repeats: true)
}
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]){
let locValue:CLLocationCoordinate2D = manager.location!.coordinate
self.latitude = locValue.latitude
self.longitude = locValue.longitude
if UIApplication.sharedApplication().applicationState == .Active {
} else {
backgroundTaskIdentifier = UIApplication.sharedApplication().beginBackgroundTaskWithExpirationHandler({() -> Void in
self.backgroundTimer.invalidate()
self.backgroundTimer = NSTimer.scheduledTimerWithTimeInterval(60.0, target: self, selector: "updateLocation", userInfo: nil, repeats: true)
})
}
}
func updateLocation() {
txtlocationLabel.text = String(n)
self.n = self.n+1
var timeRemaining = UIApplication.sharedApplication().backgroundTimeRemaining
print(timeRemaining)
if timeRemaining > 60.0 {
self.GeoLogLocation(self.latitude,Longitude: self.longitude) {
results in
print("View Controller: \(results)")
self.CheckResult(String(results))
}
} else {
if timeRemaining == 0 {
UIApplication.sharedApplication().endBackgroundTask(backgroundTaskIdentifier)
}
backgroundTaskIdentifier2 = UIApplication.sharedApplication().beginBackgroundTaskWithExpirationHandler({() -> Void in
self.backgroundTimer.invalidate()
self.backgroundTimer = NSTimer.scheduledTimerWithTimeInterval(60.0, target: self, selector: "updateLocation", userInfo: nil, repeats: true)
})
}
}
Yardım için teşekkürler ... Ben dediğin her 60 saniyede olarak ... Ben hala aynı sonucu elde (yani uygulama çalışır ve güncellemeleri yerini yalnızca doğruluk değerini değiştirerek çalıştı ... Swift oldukça yeniyim o arka plana sonra üç dakika) – Carey
Merhaba, üzgünüm ben söylemeyi unutmuşum ve bu kodunuzda eksik inanıyoruz, ayrıca, konum yöneticisi self.locationManager çizgisinde bir şey arkaplan yerleri etkinleştirmeniz gerekir.allowBackgroundLocationUpdates = true –
Çok teşekkürler kardeşim. Çalıştım! – Carey