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技能是......欠發達......有什麼改進建議嗎?
是的,問題是connect()必須在調用getLastLocation()之前調用(和onConnected事件接收)。我想用同步方法來包裝所有這些,並且我在同步部分中遇到了很多困難。 –