2011-06-04 7 views
4

ロケーションベースのAndroidアプリのアーキテクチャ/ワークフローのベストプラクティスは何ですか?

私の現在のコードは、いくつかのアクティビティと1つのバッキングサービスと複数のAsyncTaskを使用しています。

私のアプリケーションが起動するとすぐにサービスを開始します。私はサービスですべてのHTTP呼び出しと解析を行います。また、私はAsyncTaskのサブクラスを作成してユーザーの場所を取得しました。ユーザーの場所を更新する必要があるたびにAsyncTaskを実行します。 AyncTaskはLocationManager.requestLocationUpdates()を呼び出し、できるだけ早く場所を取得するように求めます。私の戦略は次のとおりです。
1.まず、GPSとネットワークの両方について、getLastKnownLocationを取得し、http://developer.android.com/guide/topics/location/obtaining-user-location.html#BestEstimateの方法で比較します。
2. 3つのGPSロケーションと5つのネットワークロケーションが取得された場合、またはGPSとネットワークの一方または両方が1分で応答しなかった場合は、タスクを停止します。
3.私は最良の見積りを返します。

Locating AsyncTaskはサービス内で実行され、AlarmServiceを5分間設定してサービスをインテントに送信して、ユーザーの場所を更新する必要があるかどうかを確認します。 2つのAsyncTask間の最小間隔は10分です。ユーザーは、単にボタンを押すだけで、場所の更新を手動で要求できます。

上記は私のアプリに位置情報サービスを実装する方法です。
私の練習が適切かどうかを知る必要があります。もし何が間違っていない?はいの場合、改善できるものはありますか?ロケーションベースのAndroidアプリのアーキテクチャのベストプラクティスは何ですか?

+0

これは、この点について多くの便利なコードを含む素晴らしい記事です。 http://android-developers.blogspot。com/2011/06/deep-dive-into-location.html –

答えて

4

私はかなりそれを得たと思う。私はできるだけ早く "出入り"を望む非常に似通ったソリューションを持っています。

私のアルゴリズムに「精度」のチェックを実装しました。私は最高の可能な場所を取得するために開始から1分サービスを与える、または私は25メートル以上の精度の修正を得る場合でも早く終了します。

また、私は場所自体にAsyncTaskを使用しません - サービスはスレッドをブロックしませんし、LocationManagerからコールバックを取得して処理するので、AsyncTaskを実行する理由がわかりません。

私は場所を取得して終了しようとしています - 私は非同期タスクをサーバーにHTTPポストを処理する呼び出します。

私が5/15/30/1hrと1/2dayのユーザオプションを与える限り。私はこれに不正確なアラームを使用します - おそらくバッテリーで良いです。

+0

5/15/30/1時間と1/2日は合理的なオプションです。ご利用いただきありがとうございます。 AsyncTaskは主にGeoCoderを使用して場所のバックグラウンド処理を行うために使用します。 GPS座標の文字列表現を取得します。 – CarlLee

+0

by String表現私は、アドレス – CarlLee

+1

を意味しています。ウェブサービスが関係しているので、それを修正します。非同期に移動することをお勧めします。私が何をすれば、私はすべてのポジションをSQLテーブルに記録し、それが処理されてアップロードされるときに削除します。これにより、GPSを有効にしてもネットワークがない場合のシナリオを処理できます。 – katit

4

これは答えではありませんが、ここにいくつかの追加点があります。 Reto Meierさんは、Google IOのPro Androidのヒントで、電池が少ない場合はwi-fiを使用しないことを提案しました。

これは、場所まで拡張することもできます。ユーザーが自分のバッテリーが弱すぎることを知らせてください。& GPS &ネットワークプロバイダを使用していない可能性があります。代わりに、正確な最新の場所が使用されます。

あなたはそれを言及していないので、最悪の場合のシナリオでは、ロケーションプロバイダーが有効になっているかどうかを確認できません。同じものを確認し、すべてのプロバイダが無効になっている場合は、ロケーションサービスを有効にするようにユーザーに要求するアラートを表示する必要があります。

+0

非常に便利なヒントです。私はユーザーエクスペリエンスを向上させるのに非常に役立ちます。ありがとうございました。 – CarlLee

関連する問題