2

チュートリアルなどからアプリで次のコードを使用して、GPS (または GPS がオンになっていない場合はネットワーク) から可能な限り最良の位置修正を取得し、テキスト フィールドに表示します。

crit = new Criteria();
context = Context.LOCATION_SERVICE;
locationManager = (LocationManager) this.getSystemService(context);
crit.setAccuracy(Criteria.ACCURACY_FINE);
crit.setPowerRequirement(Criteria.POWER_LOW);
crit.setAltitudeRequired(false);
crit.setBearingRequired(false);
crit.setSpeedRequired(false);
crit.setCostAllowed(false);
try {
    bestProvider = locationManager.getBestProvider(crit, true);
    loc = locationManager.getLastKnownLocation(bestProvider);
    locationManager.requestLocationUpdates(bestProvider, 0, 0,
            new GeoUpdateHandler());
} catch (java.lang.RuntimeException run) {
    Toast.makeText(getBaseContext(),
    "Waiting for location fix...", Toast.LENGTH_SHORT).show();
}

私の問題は、場所間の移動です。ノーフォークでアプリの使用を開始し、場所を確認しました。翌日、私はコーンウォール (100 マイル離れた場所) にいて、アプリのスイッチを入れると (この時点で Android によって閉じられているか破棄されているはずです)、まだノーフォークの場所が表示されます。その後、アプリを終了して再度起動すると、新しい場所が取得されることがわかりました。私はこれを簡単に行うことができますが、私のユーザーはそれが本当に面倒だと感じています。

GPS/ネットワークが利用可能な場合、アプリを起動すると、LOC が最後の既知の場所から作成され、locationManager が即座に更新されます (LOC を即座に更新する必要があります)。

public class GeoUpdateHandler implements LocationListener {
  public void onLocationChanged(Location location) {
    loc = location;
  }
  public void onProviderDisabled(String provider) { }
  public void onProviderEnabled(String provider) {  }
  public void onStatusChanged(String provider, int status, Bundle extras) { }
}

明らかに、この更新は行われていません。

私のコードがばかげているかどうか、または常に現在の場所を処理していることを確認するためのより良い方法についてアドバイスしてもらえますか? ありがとう。これが回答されている場合はお詫びします。場所と requestLocationUpdates タグに関するすべての投稿の中から見つけるのは困難です。

4

1 に答える 1

2

チャットで議論した後、私は次のことを提案しました。

requestLocationUpdates()電話をかけてから、「現在地を取得しています」などのダイアログをユーザーに表示する必要があります。しばらくonLocationChanged()して、最新の場所を含むコールバックを取得する必要があります。その時点で、ダイアログを閉じて、テキスト フィールドやその他ユーザーに表示したいものを更新できます。removeUpdates()また、ユーザーのバッテリーを消耗させないように、最新の場所を取得したら電話する必要があります。

于 2012-06-07T14:52:01.280 に答える