2014-02-20 97 views
3

同步方式使用LocationClient(v2 API)獲取Android上最後一個已知位置的「正確」方式是什麼?同步獲取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()必須在調用getLastLocation()之前調用(和onConnected事件接收)。我想用同步方法來包裝所有這些,並且我在同步部分中遇到了很多困難。 –

相關問題