3

LocationAware通知の最良のテクニックを探しています。

私の最初の試みはLocationManagerのaddProximityAlertを使用することでしたが、ACCESS_FINE_LOCATION(COARSE_LOCATIONはSecurityExceptionを与えます)を必要とし、GPSを常にオンにしてアクティブに保ちます(少なくともJelly Beanでは)。また、画面がスリープしているときに4分に1回だけチェックを尊重していないようです(addProximityAlert)。

PASSIVE_PROVIDERと連携して他のアプリケーションの位置情報を収集し、サービスを使用してCOARSE_LOCATIONを時々(画面がオフのときは4分ごと、画面がオンのときはもっと頻繁に)要求することを考えています。デバイスが接続されています)。

要件は、ユーザーがいくつかの場所の近くに行くと、アプリが通知を発行することです。

誰かがこれを効果的でバッテリー効率の良い方法で実装したり、実装するための提案がありますか?

4

2 に答える 2

4

私はそのようなアプリを作成し(したがって、LocationManagerの消費電力を測定する方法についてのOffice Hours Q&Aでの私の質問)、その間、それは本当にうまく機能しています。私は当初、組み込みの近接アラートを使用するつもりでしたが、あなたと同じ問題に苦労し、十分な柔軟性がないと思いました。

代わりに、LocationProviderを使用してNETWORK_PROVIDERを使用して5分ごとに場所をポーリングし、目的の場所までの距離を計算し、近接している場合は通知を送信するサービスを構築しました。Wifiネットワークがたくさんある都市では、これにより(報告された)精度は50メートルになります。

また、PASSIVE_PROVIDERを使用して、他のアプリの位置情報リクエストを利用しています。

目的の場所の近くにいて、報告された精度が粗すぎて指定された近接範囲内にあるかどうかを判断できない場合は、バックアップとして単一のGPS位置情報要求を使用しています。また、NETWORK_PROVIDERがタイムアウトした場合は、単一のGPS位置情報要求を使用します。地下鉄を使用しているときにGPSプロバイダーがバッテリーを消耗しないようにするために、指数バックオフを伴うタイムアウトもあります。

Wifiネットワークに接続している間は、移動していないと想定し、その間はロケーションプロバイダーを無効にします。

私が行った最後の変更は、15分以内に保存された場所のいずれにも到達できないと判断できる場合は、NETWORK_PROVIDERに15分(「不正確な繰り返し」)タイマーを使用することでした(したがって、5分間隔でポーリングします)意味がありません)。これにより、電力を節約できます。

さらに長い間隔を使用してさらに電力を節約することを考えていましたが、その時間内に保存した場所の1つに到達できるかどうかを判断するヒューリスティックをここで見つけるのは簡単ではありません。これは、常に想定できるとは限らないためです。同じ移動速度(徒歩、電車または車での移動)。しかし、アプリによって引き起こされたLocationManagerの消費電力を測定できないため、毎日のシナリオで消費電力を評価する方法がわかりません。

組み込みのAPIがそのすべてのロジックを提供するかどうかは気になりませんが、提供しないと結論付けたので、これを自分で作成しました。

これがお役に立てば幸いです。

于 2012-08-22T22:34:59.073 に答える
0

私はこれを行うために次のライブラリを使用しています。https://code.google.com/p/little-fluffy-location-library/

使い方は簡単ですが、柔軟性はあまりありません。たとえば、更新頻度をオンザフライで変更することはできません。しかし、そのソースは利用可能です、あなたはそれを変換することができます。

于 2012-08-22T22:46:54.073 に答える