2016-09-07 4 views
0

アプリには約10メートルの精度でデバイスの場所が必要です。アプリが起動されると、通常、必要な精度を得るために10秒。この遅延は問題ありません。しかし、アプリが「使用中」の場合(下記参照)、遅れは少なくなるはずです。 1秒。iOS:他のアプリがアクティブになっているかどうかを確認する

問題は、以下である:

ユーザがディスプレイをオフにするとき、バックグラウンド状態にアクティブ状態からアプリ遷移(及びデリゲートメソッドapplicationWillResignActiveapplicationDidEnterBackgroundが呼び出されます)。
通常、ロケーションの更新はバックグラウンドで行われません。そのため、次回にアプリがバックグラウンドからアクティブな状態に移行する(デリゲートメソッドapplicationWillEnterForegroundapplicationDidBecomeActiveが呼び出されます)、ロケーションマネージャは再び必要になります。必要な精度に達するまで10秒。残念ながらこの遅れはOKではありません。

これを避けるため、アプリはバックグラウンドで位置情報の更新を行うことができます。これは正常に動作します。
ユーザーがホームボタンを押して別のアプリに切り替えたため、アプリがもう使用されなくても、これらのバックグラウンドの場所の更新が継続されるという欠点があります。これは、少なくとも2つの理由で妨げになっています:GPSハードウェアが不必要にアクティブで電力を消費していますが、私のアプリがデバイスの場所を使用していることが通知されます。

私の質問は、このようです:

それは別のアプリがアクティブになったかどうかを判断することは可能ですか?
この場合、バックグラウンドの場所の更新を無効にすることができます。

答えて

2

他のアプリがアクティブになっているかどうかを確認することはできますか?

いいえ、アプリはバックグラウンドかフォアグラウンド処理代行イベントかどうかしか知りません。ユーザーが別のアプリを開いたか、ホーム画面にあるかどうかを知ることはできません。

ユーザーがホームボタンを押して別のアプリに切り替わったため、これらのバックグラウンドの場所の更新は、アプリがもう使用されなくても継続されます。

あなたは正しいと思います。アプリケーションがバックグラウンドになるとタイマーを開始し、ローカリゼーションを認証された期間(1分?)だけ更新することができます。次に、タイマーカウントの最後に、最後のローカライズ座標を保存します。タイマーは不必要な更新を避けるために使用されます。ユーザーが妥当な時間の後にアプリを再度開いていない場合は、他のアプリを使用しているか、端末をロックしている可能性があります。

アプリがフォアグランドに再び来ると、タイマーがまだアクティブであれば、あなたはいいです。それ以外の場合は、最後のローカライゼーションが保存され、小さな「バナー」が表示され、最初の10秒間にローカライゼーションが正確に行えないことが示されます(必要な精度に達するまで)

+0

ありがとうございました。私は、別のアプリがアクティブになるかどうかを判断することができないことを恐れていました。残念ながら、あなたの提案はタイマーで問題を解決することはできません。なぜなら、アプリは数分から、例えば2時間で "使用中"になる可能性があるからです。 –

関連する問題