获取位置iOS 8(c)

时间:2015-03-04 22:37:50

标签: ios swift location nstimer background-task

我希望在应用后台获取用户位置。如果我使用计时器9秒或更短秒,如果我使用10秒甚至更长时间我无法获得用户位置...

我的代码(AppDelegate.swift):

import UIKit
import CoreLocation

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, CLLocationManagerDelegate {

    var window: UIWindow?
    var backgroundTaskIdentifier:UIBackgroundTaskIdentifier = UIBackgroundTaskInvalid
    var myTimer: NSTimer?

    var locationManager = CLLocationManager()

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        // Override point for customization after application launch.
        return true
    }

    func isMultitaskingSupported()->Bool{
        return UIDevice.currentDevice().multitaskingSupported
    }

    func timerMethod(sender: NSTimer){
        let backgroundTimerRemainig = UIApplication.sharedApplication().backgroundTimeRemaining

        self.locationManager.startUpdatingLocation()

        if backgroundTimerRemainig == DBL_MAX{
            println("test1");
        }else{
            println("test");
        self.locationManager.delegate = self
        self.locationManager.startUpdatingLocation()

        }
    }

    func applicationWillResignActive(application: UIApplication) {

    }

    func applicationDidEnterBackground(application: UIApplication){

        if isMultitaskingSupported() == false{
            return
        }

        myTimer = NSTimer.scheduledTimerWithTimeInterval(60.0,
            target: self,
            selector: "timerMethod:",
            userInfo: nil,
            repeats: true)

        backgroundTaskIdentifier = UIApplication.sharedApplication().beginBackgroundTaskWithExpirationHandler { () -> Void in
            UIApplication.sharedApplication().endBackgroundTask(self.backgroundTaskIdentifier)
        }
    }

    func endBackgroundTask(){
        let mainQueue = dispatch_get_main_queue()

        dispatch_async(mainQueue, {[weak self] in
            if let timer = self!.myTimer{
                timer.invalidate()
                self!.myTimer = nil
                UIApplication.sharedApplication().endBackgroundTask(self!.backgroundTaskIdentifier)
                self!.backgroundTaskIdentifier = UIBackgroundTaskInvalid
            }
        })
    }

    func applicationWillEnterForeground(application: UIApplication) {
        if backgroundTaskIdentifier != UIBackgroundTaskInvalid{
            endBackgroundTask()
        }


    }

    func applicationDidBecomeActive(application: UIApplication) {

    }

    func applicationWillTerminate(application: UIApplication) {
        // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
    }

    func locationManager(manager: CLLocationManager!, didUpdateToLocation locations:[AnyObject]) {
        var latValue = locationManager.location.coordinate.latitude
        var lonValue = locationManager.location.coordinate.longitude
    }
}

当我使用10秒甚至更长时间时,为什么我无法获得用户位置?

0 个答案:

没有答案