私はAlexBottoniの良い答えからのコメントのほとんどに同意しますが、いくつかの点で彼を支持することはできません.
概要
まず、正しく実行しているかどうかを確認するため...
LocationListener
両方のプロバイダーに同じ設定を行います。場所を受信している場所を特定するには、次のようにテストする必要があります。
public void onLocationChanged(Location fix) {
if(fix.getProvider().equals(LocationManager.GPS_PROVIDER)){
//here Gps
} else if(fix.getProvider().equals(LocationManager.NETWORK_PROVIDER)){
//here Network
}
また、別の取得頻度を設定します。は、30 秒ごとおよび 2 分ごとGps
に新しい場所を提供しています。Network
最小距離を課さなかったので、Location
要求された頻度で (修正を取得できる限り) 各プロバイダーから新しいものを受け取る必要があります。修正プログラムが届かない場合は、修正プログラムを入手できなかったことが原因です。
また、衛星と同期して位置を修正するのに時間がかかる場合があるため、(主に Gps を使用して) 修正を取得するのに要求されたよりも少し時間がかかる場合があります。
後退する
あるプロバイダーから別のプロバイダーへの組み込みのフォールバックはありません。アレックスが言ったように、彼らは独立しています。フォールバックを実装するために次のアプローチを使用しています。
- GPS リスナーを登録してタイマーを開始する
- すべての GPS 位置で、タイマーを再起動します
- タイマーが終了したら、ネットワーク リスナーを登録します (GPS リスナーは登録されたままになります)。
- 新しい GPS ロケーションが到着したら、ネットワーク リスナーの登録を解除し、タイマーを再起動します
好ましいプロバイダー
どこでも利用できるわけGps
ではありませんが、はるかに正確Network
です。私の町では、GPS で 6 メートル、ネットワークで 1 Km の精度が得られます :-(
2つのサービス
リスナー、アクティビティ、またはサービスを登録する場所は関係ありません。それらを要求し、プロバイダーが修正を取得できる限り、場所を取得できます (アプリケーションにバグがないと仮定して :-))
ファイナルノート
必要な権限があることを確認してください (ACCESS_FINE_LOCATION、INTERNET など)。
電話のセットアップでネットワーク ロケーションが有効になっていることを確認します (通常、デフォルトでは無効になっています)。
ほとんどの Gps 受信機は、衛星の位置に関する情報の更新をサポートしているため、修正時間が短縮されます。あなたGPS Satus
はそれを行うために、市場から使用することができます.
よろしく。