0

私の iOS アプリケーションは GPS に大きく依存しており、バッテリーの節約に役立つメソッドを作成しようとしましたが、ほとんど成功していません。

15 秒ごとに起動する NSTimer を作成しました。メソッドが呼び出されるたびに、int 時間が 1 ずつ増加します。int 時間が 20 (5 分) に達すると、位置の更新がオフになり、bool isStopped が true に設定されます。メソッドが実行され、int time が 20 を超えるたびに、別の int である int time2 が 1 ずつインクリメントされます。メソッドが実行され、int time2 が 4 に等しい場合、ロケーションの更新が再び開始され、time2 が 0 に設定されます。 .

次に、ロケーション マネージャーの didUpdateLocation: メソッドで、bool isStopped が true かどうかを最初に確認し、true の場合は新しい場所の水平精度を確認し、10 未満であることを確認するアルゴリズムを用意しました。 coords という名前のロケーション オブジェクトで newLocation をチェックし、それらが 9 メートル以上離れているかどうかをチェックします。そうでない場合は、位置情報の更新を再び停止して戻ります。そうである場合、別のアルゴリズムに進み、新しいロケーション オブジェクトをいくつかの引数に対してチェックします。座標位置オブジェクトが新しい位置オブジェクトで設定され、time および time2 int が 0 に設定され、isStopped が false に設定され、プロセス全体が最初からやり直されます。

つまり、5 分間場所が変更されなかった場合、場所の更新は停止され、1 分ごとに定期的にチェックされ、すべての要件を満たした前の場所からユーザーが少なくとも 10 メートル移動したかどうかが確認されます。ユーザーが十分に移動すると、プロセスが最初からやり直され、ユーザーは定期的なチェックを開始する前に 5 分間 10 メートル以上移動する必要がありません。この背後にある考え方は、位置情報サービスを常に実行するのではなく、ユーザーがあまり動いて​​いないときに毎分数秒のチェックのみを行うことです。

ここで、場所の更新が停止したときに遭遇する問題があります。アプリがバックグラウンドにある間、NSTimer は実行を停止します。

バックグラウンド タスクをスケジュールして、1 分間のチェックの間にループを実行することはできますか? 誰もがより良いアイデアを持っていますか? または、これに対する解決策に関するアイデアはありますか?

4

1 に答える 1

1

しばらく前に、バックグラウンドで GPS を実行するさまざまな方法について質問しました。

CLLocationManager geo-fencing/startMonitoringForRegion: vs. startMonitoringForSignificantLocationChanges: vs. 10 分間の startUpdating 呼び出し

バックグラウンドで GPS を維持するには、特定のことを行う必要があります。10 分後にバックグラウンドでアプリを実行し続けることを許可するには、アプリを登録する必要があるため、NSTimer では十分ではありません。アプリを実行し続けるために、バックグラウンドで 10 分ごとに GPS を実行する必要は最小限です。

とにかく、上記の投稿の方法はあなたの質問に答えるはずです.

于 2013-09-15T01:33:16.160 に答える