同步获取Android上最后一个已知位置

时间:2014-02-20 09:24:48

标签: android location

同步方式使用LocationClient(v2 API)在Android上获取最后一个已知位置的“正确”方法是什么?


更新

这是我提出的最好的(它不是同步的,但它克服了每次需要最后一个已知位置时处理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技能是......欠发达......任何改进建议?

1 个答案:

答案 0 :(得分:0)

这样做的合法方法是使用LocationClient的

getLastLocation()

如果你想以同步的方式进行,你应该记住它不是一个精确的位置,在极少数情况下它甚至可能不可用。请查看以下文档:

public Location getLastLocation ()

返回当前可用的最新位置。

如果某个位置不可用,这种情况很少发生,则会返回null。将返回尊重位置权限时可用的最佳准确度。

此方法提供了获取位置的简化方法。它特别适用于不需要精确定位且不希望为位置更新维护额外逻辑的应用程序。