2011-02-08 11 views
3

Androidでサービスに関する質問があります。私はGPSから位置変数を得るための最良のアプローチが何であるか知りたい。私はGPSモジュールを実装したサービスを使ってジオロケーションを使ってアプリケーションをやっています。そして、場所を取得するために、私はクラスの静的およびパブリックメソッド静的変数をクラス外から呼び出すことを作成し、それはそれです。 GPSからの位置を取得するには、私のクラスでちょうど使用しました。AndroidでのGPSサービス

ロケーションmLocation = ServiceGPS.getLocation(); ServiceGPSクラスには、次のメソッドがあります。

public static Location getLocation(){ return mLocation; }

静的メソッドを呼び出すだけで、この場合はサービスへのバインディングのポイントが実際にはわかりません。私は基本クラスをやろうと考えていた、またはLocationListenerを実装していましたが、この方法はとても簡単で、コードライティングを保存しています。

ご協力いただき、ありがとうございました。

BRです。デビッド。

+0

あなたが得た回答に投票して、最も良いと思う答えを選んでください。これを行うことで得点が得られ、将来あなたの質問に答えられる可能性が高くなります。 –

+0

こんにちは、私は以下に答えました。 – Dayerman

答えて

9

別の場所(最終的に知られている場所、GPS受信機、Wi-Fiネットワークの場所、モバイルデータネットワーク)からのもので、より重要なのはAndroidの場所を「取得」するだけではありません場所を受信するのに時間がかかったり、まったく受信できない場合があります(たとえば、GPSはありますが、屋内の信号はありません)。

場所を取得するのに時間がかかることがあるという事実は、以前にキャッシュされた場所がない限り、別のスレッドでlocation-seekを実行する必要があることを意味します。そうしないと、アプリケーションが取得されるまでロックされます(GPSやジオロケーションネットワークのないデバイスなど)。

これは、あなたが、読んダイジェスト、および使用する必要がある重要なページです:あなたはアンドロイドで、場所を地理ために新しいしている場合、で開始するコード例を使用し http://developer.android.com/guide/topics/location/obtaining-user-location.html

私はアプリケーションにジオロケーションを追加学んだ事がある...

  • は、ロケーションプロバイダが存在していると思い込みません。デバイスにネットワーク接続がないか、GPSが接続されていない可能性があります。これらのシナリオを処理するには、コード内でエラー処理が必要です。
  • アプリを反応的に保つために常にジオルックアップを行うスレッドを使用してください。
  • できるだけAndroidの最後の既知の場所を使用しようとすると、クイックロックが提供されます。バックグラウンドの場所をより正確な場所に更新することができます。
  • ジオロケーションができないデバイス(たとえば、安価なタブレット、Google TVなど)でアプリが実行される場合は、環境設定でその場所が保存されるため、ユーザーはその情報を一度特定し、新しい場所を見つけることができません)
  • 場所やスレッドなどを管理するためのクラスを作成することは、しばしば意味があります。アプリ内の他のクラスは、あなたの提案どおりに静的メソッドを呼び出すことができますが、あなたはあなたの可変的なmLocationに価値を得るために使用します!
  • 場所がまったく見つからない場合があります.Door &のコンテキストが異なる可能性はありません。
  • 非常に正確な場所が必要な場合を除き、ネットワークロケーションプロバイダーも頻繁に非常に迅速なので、常に使用してください。新鮮な場所からのGPSロケーションのルックアップは非常に遅く、ユーザーは退屈して不満を感じます。 Googleマップはかなり速いようですが、実際には位置情報のキャッシングがかなりありますが、新鮮な場所を取得するのが遅くなることがあります。

私はAndroid上でマーク・マーフィーの電子書籍をお勧めします、彼は私がちょうど はまた、私は別のを呼び出すプロバイダをchekingています...の位置を取得していない午前ジオロケーションhttp://commonsware.com/

+0

+1、非常によく話されています。 GPSを追加することは、単に「プラグアンドプレイ」機能ではなく、時間の一部が失敗することがほぼ保証されているため、いくつかの計画が必要です。 – Brandon

0

ための優れたカバレッジとソースコードの例を持っていますサービスの方法。そして、それに応じて、私は例外をスローするかどうかを決めます。後で行うプロシューティングは問題ではありません。私はあなたに感謝しています。しかし、私の質問は次のとおりです:

静的メソッドを呼び出すだけで、この場合はサービスへのバインディングのポイントが実際にはわかりません。私は基本クラスをやろうと考えていた、またはLocationListenerを実装していましたが、この方法はとても簡単で、コードライティングを保存しています。

実際に私はサービス内で自分の位置を実行していますので、別のスレッドで実行しているので、あなたの意見は分かりません。 Androidの場所はどのように機能しますか。 乾杯してください デビット

+0

サービスは別のスレッドを実行せず、アプリケーションのメインスレッド上で実行されます。バックグラウンドで実行できるのは、フォアグラウンドでのアクティビティなしです。明示的に作成されたスレッド上で行われない場合、サービス内のブロッキング呼び出しはUI内のイベントを防ぎます。 – Martin