2016-12-07 10 views
0

アプリケーションがバックグラウンドモードであっても、n分ごとに場所の更新が必要なアプリケーションを作成し、サーバーにデータを送信しています。私はこの仕事について多くのリンクを見てきました。私が適切な解決策を見つけたので、タイマーを使用してバックグラウンドタスクにしてください。n分ごとにバックグラウンドの場所が更新されます

  1. どのように私はこれらの定期的なバックグラウンド位置情報の更新を実装することができます。これにに関して

    は、私は2つの質問がありますか?私はアップルが特定の時間だけバックグラウンドタスクを許可していることを理解しています。では、どうやって長時間バックグラウンドタイマーを作れますか?

  2. リンゴはそのような種類のロジックを持つアプリケーションを拒否しますか? appdelegate内部
+0

https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide /BackgroundExecution/BackgroundExecution.html –

+0

上記のリンクには、「ユーザーの所在を追跡する」の正確な要件に関する詳細セクションがあります。 –

答えて

1

appdelegate

var n = 10 //seconds 

var timer = Timer.scheduledTimer(timeInterval: n, target: self, selector: #selector(getLocation), userInfo: nil, repeats: true) 

didFinishLaunchingWithOptionsメソッド内でこの

 func getLocation() 
     { 
       locationManager.allowsBackgroundLocationUpdates = true 
       locationManager.delegate = self 
       locationManager.desiredAccuracy = kCLLocationAccuracyBest    
       locationManager.startUpdatingLocation() 
     } 

のようなメソッドを作成code.Thisをします、次のcllocationmanager

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) 
    { 
    locationManager.stopUpdatingLocation() 
    locationManager.delegate = nil 
    //get the coordinates or do some code 
    } 
2

使用のためのデリゲートメソッドを設定します3分仕事TES

コールこのdidenterbackgroundまたはフォアグラウンドあなたが好きな

var time = 180 
func applicationDidEnterBackground(_ application: UIApplication) 
    { 

     self.doBackgroundTask() 
    } 

var timerBack = Timer() 
    func doBackgroundTask() { 

     DispatchQueue.global(qos: DispatchQoS.QoSClass.default).async { 
      self.beginBackgroundUpdateTask() 


      self.timerBack = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(AppDelegate.displayAlert), userInfo: nil, repeats: true) 
      RunLoop.current.add(self.timerBack, forMode: RunLoopMode.defaultRunLoopMode) 
      RunLoop.current.run() 

      self.endBackgroundUpdateTask() 
     } 
    } 
    var backgroundUpdateTask: UIBackgroundTaskIdentifier! 

    func beginBackgroundUpdateTask() { 
     self.backgroundUpdateTask = UIApplication.shared.beginBackgroundTask(expirationHandler: { 
      self.endBackgroundUpdateTask() 
     }) 
    } 

    func endBackgroundUpdateTask() { 
     UIApplication.shared.endBackgroundTask(self.backgroundUpdateTask) 
     self.backgroundUpdateTask = UIBackgroundTaskInvalid 
    } 

//ドゥ

func displayAlert{ 


} 
+0

返信ありがとうございます。あなたの答えは、(3分以上)バックグラウンドタスクの時間を延ばすことは可能ですか、それはリンゴによって制限されていますか? –

+0

iOSがアプリケーションを停止状態にしているため、時間を増やすことはできません。私はこのコードを180秒間テストしました –

関連する問題