web-dev-qa-db-ja.com

Android LocationManager.getLastKnownLocation()がnullを返す

したがって、アプリケーションで一度だけgps座標をサンプリングしようとしています。 LocationListenerオブジェクトを作成して、常にgpsの更新を取得したくありません。座標を受け取るまで待ってから、別のタスクに進みます。

ここにコードスニペットがあります

LocationManager lm = (LocationManager)act.getSystemService(Context.LOCATION_SERVICE);
Criteria crit = new Criteria();
crit.setAccuracy(Criteria.ACCURACY_FINE);
String provider = lm.getBestProvider(crit, true);
Location loc = lm.getLastKnownLocation(provider);

Loc変数は、エミュレータでは常にnullです。 「geo fix緯度経度」コマンドを使用して設定してみました。また、DDMSを使用して設定してみました。どちらの方法もコードに影響を与えませんでした。また、スニペットは例外を引き起こしていません。

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

17
Robert Parker

場所の更新を要求する呼び出しはブロックされていないため、そこで待機しません。また、エミュレーターのプロバイダーが開始されていない可能性があります。

可能なチェックは、その設定がgpsプロバイダーを無効にするかどうかを確認することです。その後、ジオフィックスを送信します。

ただし、ロケーションリスナーを使用します。先に進むには地理的な修正が必要なので、理想的です。ロケーションリスナーは、ロケーションが変更されたときにLocationManagerから通知を受信するために使用されます。最初のgeofixの後でリスナーの登録を解除できます。

注:デバイスで現在位置を取得するには時間がかかる場合があり、デバイスでもnullが返される場合があります。

11
krishc

MyLocationOverlay を使用して、そのGPS位置で実行する必要があることを実行するランナブルを作成し、それを

boolean     runOnFirstFix(Java.lang.Runnable runnable)
          Queues a runnable to be executed as soon as we have a location fix.

次に、MyLocationOverlayの位置更新を無効にします。

編集:場所がnullである理由は、コードの実行時にgeofixが受信されていないためです。

0
I82Much