0

私のアプリケーションでは、現在の場所を見つけるために CLLocation マネージャーを使用しています。現在の場所に応じて、自分の場所で日の出と日の入りの時間を取得したいと考えています。

例: 現在地がサンフランシスコの場合、日の出時刻と日没時刻はサンフランシスコのものです。この時点まで、私は成功しました。しかし、アプリケーションがバックグラウンドであっても、現在の時刻が日の出時刻と等しい場合は、毎日アラームをトリガーしたいと考えています。

私は多くの方法を探しましたが、満足できるものはありませんでした。iOS開発初心者です。

applicationDidEnterBackground メソッドは、アプリケーションを終了する前にしばらく実行されます。

4

2 に答える 2

2

plist でバックグラウンド ロケーション モードをセットアップして、バックラウンドでもロケーションの更新に応答できるようにすることができます。次に、場所で更新されたコールバックで日没時刻を取得し、その時刻にローカル通知をスケジュールします。

また、通知を管理し、不適切なものを無効にすることをお勧めします (場所の変更 = > 新しい通知)。

更新: 特定の状況では、位置データの連続ストリームは必要ありません。重要な位置変更の追跡は問題ありません。このアプローチは、plist で要求されたバックグラウンド ロケーション モードを必要とせず、光の速さでバッテリーを消耗しません。ここで情報を見つけることができます: - (void)startMonitoringSignificantLocationChanges。バックグラウンド位置モードのアプリがバックグラウンドで継続的に実行されていなくても、位置更新コールバックを実行するためにのみ呼び出されることに注意してください。

したがって、最初に次のことを行います。

[locationManager startMonitoringSignificantLocationChanges];

次に、ロケーション更新コールバックで次のことを行います。

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
    // check location
    // get time of sunset

    // schedule UILocalNotification
}

iOS 4.Objective-C で UILocalNotification を使用してリマインダーを設定するという記事を見つけました。これもチェックしてください:バックグラウンドでコードを実行する+日付にアラームをスケジュールする

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