アプリケーションが(ネットワーク& GPSを使用して)プロバイダを使用し始めるとすぐに位置更新をリッスンし始めます。ロケーションリスナーが最初のロケーション修正を受信するのにかかる時間は、長い間ユーザーが待っています。私のロケーションリスナーにもっと正確な場所が提供されるまで、 だから、私はgetLastKnownLocation(String)を呼び出してキャッシュされた場所を利用すべきだと思います。アンドロイドでロケーションプロバイダとモバイルキャッシュを取得する
本当に私は少し正確に私のコードにgetLastKnownLocation(String)メソッドを置く必要があります混乱しています! requestLocationUpdates()の前または後に ?私の関数またはonResume()で?
誰もが事前
におけるおかげで、これは私の関数である、私を助けてください。 -
private final LocationListener gpsLocationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
locationManager.removeUpdates(networkLocationListener);
Toast.makeText(activity,"New GPS location: "
+ String.format("%9.6f", location.getLatitude()) + ", "
+ String.format("%9.6f", location.getLongitude()) + "\n",Toast.LENGTH_SHORT).show();
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
switch (status) {
case LocationProvider.AVAILABLE:
Toast.makeText(activity,"GPS available again\n",Toast.LENGTH_SHORT).show();
break;
case LocationProvider.OUT_OF_SERVICE:
Toast.makeText(activity,"GPS out of service\n",Toast.LENGTH_SHORT).show();
break;
case LocationProvider.TEMPORARILY_UNAVAILABLE:
Toast.makeText(activity,"GPS temporarily unavailable\n", Toast.LENGTH_SHORT).show();
break;
}}
@Override
public void onProviderEnabled(String provider) {
Toast.makeText(activity,"GPS Provider Enabled\n",Toast.LENGTH_SHORT).show();
}
@Override
public void onProviderDisabled(String provider) {
Toast.makeText(activity,"GPS Provider Disabled\n",Toast.LENGTH_SHORT).show();
}
};
private final LocationListener networkLocationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
Toast.makeText(activity,"New network location: "
+ String.format("%9.6f", location.getLatitude()) + ", "
+ String.format("%9.6f", location.getLongitude()) + "\n",Toast.LENGTH_SHORT).show();
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
switch (status) {
case LocationProvider.AVAILABLE:
Toast.makeText(activity,"Network location available again\n",Toast.LENGTH_SHORT).show();
break;
case LocationProvider.OUT_OF_SERVICE:
Toast.makeText(activity,"Network location out of service\n",Toast.LENGTH_SHORT).show();
break;
case LocationProvider.TEMPORARILY_UNAVAILABLE:
Toast.makeText(activity,"Network location temporarily unavailable\n",Toast.LENGTH_SHORT).show();
break;
}
}
@Override
public void onProviderEnabled(String provider) {
Toast.makeText(activity,"Network Provider Enabled\n",Toast.LENGTH_SHORT).show();
}
@Override
public void onProviderDisabled(String provider) {
Toast.makeText(activity,"Network Provider Disabled\n",Toast.LENGTH_SHORT).show();
}
};
、これはonResume()関数のコードである: -
locationManager = (LocationManager)activity.getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
3000, 0, gpsLocationListener);
locationManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER, 5000, 0,
networkLocationListener);
requestLocationUpdates()の前に置く必要があります。最後に知っている場所を設定し、より正確な場所を待つためです。第2に、onResume()で呼び出すべきではありません。これは、このメソッドをactivity/fragmentのライフサイクルで何度も呼び出すためです。 –