Android LocationManager.getLastKnownLocation()はnullを返します
質問
そのため、アプリケーションでGPS座標を1回だけサンプリングしようとしています。 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です。コマンド「ジオ修正緯度経度」を使用してみました;それを設定するために、DDMSの設定方法を使用してみました。どちらの方法もコードに影響を与えませんでした。また、スニペットは例外を引き起こしていません。
ご協力ありがとうございます。
解決
場所の更新を要求する呼び出しはブロックされないため、そこで待機することはありません。また、エミュレーターのプロバイダーが開始されていない可能性があります。
可能なチェックは、その設定がgpsプロバイダーを無効にするかどうかを確認することです。その後、ジオフィックスを送信します。
ただし、ロケーションリスナーを使用しますが、ジオフィックスをさらに進める必要があるため、これが理想的です。ロケーションリスナーは、ロケーションが変更されたときにLocationManagerから通知を受信するために使用されます。最初のジオフィックスの後にリスナーを登録解除できます。
注:デバイス上で現在の位置を取得するには時間がかかることがあり、デバイス上でもnullを返す場合があります。
他のヒント
MyLocationOverlay 、そのGPSロケーションで必要なことを実行する実行可能ファイルを作成し、それを渡します
boolean runOnFirstFix(java.lang.Runnable runnable)
Queues a runnable to be executed as soon as we have a location fix.
次に、MyLocationOverlayの場所の更新を無効にします。
編集:場所がnullである理由は、コードの実行時にジオフィックスが受信されていないためです。