2

何日も解決策を探しましたが、満足のいくものは見つかりませんでした。

を起動しましLocationManagerたが、正しく動作しています。LocationManagerでは、スケジュールで繋いでいきたいと思います。たとえば、午前 9 時から午後 1 時まではロケーション マネージャーを稼働させ、午後 1 時から午後 3 時まではオフにし、その後は深夜までロケーション マネージャーをオンにする必要があります。

LocationManagerアプリが中断されてオフになっているときにアクションをトリガーするにはどうすればよいですか?

私はこのようなものを書きました:

[NSTimer scheduledTimerWithTimeInterval:30 target:self selector:@selector(doInBackground:) userInfo:nil repeats:YES];

- (void) doInBackground:(NSTimer*)time {
    ScheduleModel *schMod = [[ScheduleModel alloc]init];
    if(![schMod isScheduleActiveNow]){
        [locationManager stopUpdatingLocation];
        NSLog(@"LocationManager OFF");
    } else if(!locationManager){
        [locationManager startUpdatingLocation];
        NSLog(@"LocationManager ON");
    }
    [schMod release];
}

しかし、それは が機能している場合にのみ機能しLocationManagerます。スイッチLocationManagerを切ると、何もアクションをトリガーできないように見えますdoInBackground

その問題の解決策はありますか?

4

2 に答える 2

0

アプリが中断されたときに、バックグラウンドの位置情報サービスに登録しておらず、ロケーション マネージャー インスタンスの更新を開始していない場合、タイマーによってアプリの更新を再開する方法はありません。オプションは次のとおりです。

  1. ロケーションマネージャーの更新はそのままにしておきますが、アクティブにする予定の時間にのみイベントに応答します.
  2. バックグラウンド状態に入るときに、重要な場所の変更の更新のみに変更します。アプリは場所が大幅に変更されたときに起動します。その後、時間を確認し、必要に応じて継続的な更新を開始して応答できます。
  3. 監視対象の領域を設定し、領域を出るときにウェイクし、それに応じて応答します。

必須ではないにしても、バックグラウンドでの継続的な更新は、ユーザーのバッテリーの責任ある処分ではありません。あなたが達成しようとしていることをもっと説明していただければ、より良い提案ができるかもしれません。

github のハンドラーでバックグラウンド状態で作業するために私が行ったことの一部を確認できます。

TTLocationHandler

于 2012-10-16T13:17:30.783 に答える
0

このような機能を実装するには、ios アプリケーションの状態とそのマルチタスク機能に関するいくつかの点に注意する必要があります。まず、アプリが実行されていない場合でも、位置情報の更新を取得するためにアプリを登録する必要があります。重要な位置情報の変更プロパティにより、アプリの状態に関係なく位置情報を追跡できます。もう 1 つのことは、特定の時間間隔で位置情報を更新する必要があることです。ローカル通知サービスを起動することで可能になると思います。

于 2013-04-29T12:58:17.857 に答える