2014-02-20 11 views
3

Каким будет «правильный» способ получить последнее известное местоположение на Android с помощью LocationClient (v2 API) в режиме синхронно?Получите последнее известное местоположение на Android синхронно


UPDATE

Это лучшее, что я придумал (это не синхронно, но он преодолевает бремя борьбы с connect() и onConnected() каждый раз, последним известным местом требуется):

public enum SystemServicesNew implements GooglePlayServicesClient.ConnectionCallbacks, GooglePlayServicesClient.OnConnectionFailedListener { 

    INSTANCE; 

    private LocationClient mLocationClient; 
    private Location mLastKnownLocation; 

    static { 
     INSTANCE.mLocationClient = new LocationClient(MyApp.getAppContext(), INSTANCE, INSTANCE); 
     INSTANCE.mLastKnownLocation = new Location(""); 
     INSTANCE.mLastKnownLocation.setLatitude(0); 
     INSTANCE.mLastKnownLocation.setLongitude(0); 
     INSTANCE.getLastKnownLocation(); // fire it already so subsequent calls get the real location 
    } 

    public Location getLastKnownLocation() 
    { 
     if(!mLocationClient.isConnected()) { 
      mLocationClient.connect(); 
      return mLastKnownLocation; 
     } 
     mLastKnownLocation = mLocationClient.getLastLocation(); 
     return mLastKnownLocation; 
    } 

    @Override 
    public void onConnected(Bundle bundle) { 
     Toast.makeText(MyApp.getAppContext(), "LocationClient:Connected", Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    public void onDisconnected() { 
     Toast.makeText(MyApp.getAppContext(), "LocationClient:Disconnected", Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    public void onConnectionFailed(ConnectionResult connectionResult) { 
     Toast.makeText(MyApp.getAppContext(), connectionResult.toString(), Toast.LENGTH_SHORT).show(); 
    } 
} 

Мои навыки Java ... менее развиты ... любые предложения по улучшению?

ответ

0

Законный способ сделать это состоит в использовании LocationClient в

getLastLocation()

Если вы хотите сделать это в синхронном режиме, вы должны иметь в виду, что это будет не точное местоположение, и в редких случаях это может быть даже недоступно. Ознакомьтесь с приведенной ниже документацией:

public Location getLastLocation() 

Возвращает лучшее из последних доступных мест.

Если местоположение недоступно, что должно произойти очень редко, null будет возвращен. Лучшая точность, доступная при соблюдении разрешений на размещение, будет возвращена.

Этот метод обеспечивает упрощенный способ получения местоположения. Он особенно хорошо подходит для приложений, для которых не требуется точное местоположение, и которые не хотят поддерживать дополнительную логику для обновлений местоположения.

+3

Да, проблема заключается в вызове connect() перед (и полученным событием onConnected), вызывающим getLastLocation(). Я хочу обернуть все это синхронным методом, и мне очень сложно провести время с частью синхронизации. –

Смежные вопросы