2016-09-24 10 views
0

アプリケーションが(ネットワーク& 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); 
+0

requestLocationUpdates()の前に置く必要があります。最後に知っている場所を設定し、より正確な場所を待つためです。第2に、onResume()で呼び出すべきではありません。これは、このメソッドをactivity/fragmentのライフサイクルで何度も呼び出すためです。 –

答えて

0

lastKnownLocation()があるべきrequestLocationUpdates()の前に呼び出されましたが、一度それが場所を選んだら、removeUpdates()に電話したことに気付きました。おそらくrequestSingleUpdateを代わりに使用したいですか?

https://developer.android.com/reference/android/location/LocationManager.html#requestSingleUpdate(java.lang.String、android.app.PendingIntent)

this answerに、彼らはあなたが安定するとrequestSingleUpdate()を使用しないようにGPSのを待つ必要がありますが、あなたが巨大な精度の後にいないのであれば、それは次のようになり言うことに留意すべきですより良い。

+0

いいえ、私は本当に 'requestSingleUpdate()'を使用したくないです、私は最初に "ネットワーク"プロバイダを使用してから "GPS"をフォールバックして利用可能になり、ネットワークプロバイダを削除するのでremoveUpdates() – 2NE1

関連する問題