【问题标题】:Get the last known location on Android synchronously同步获取 Android 上的最后一个已知位置
【发布时间】:2014-02-20 09:24:48
【问题描述】:

同步方式使用 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 技能……不太发达……有什么改进建议吗?

【问题讨论】:

    标签: android location


    【解决方案1】:

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

    getLastLocation()

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

    public Location getLastLocation ()
    

    返回当前可用的最近最好的位置。

    如果一个位置不可用,这应该很少发生,将返回 null。将返回尊重位置权限的最佳准确度。

    此方法提供了一种获取位置的简化方法。它特别适合不需要准确位置并且不想为位置更新维护额外逻辑的应用程序。

    【讨论】:

    • 是的,问题是 connect() 必须在调用 getLastLocation() 之前(并且收到 onConnected 事件)调用。我想将所有这些都包装在一个同步方法中,而同步部分我很难做到。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-08
    • 2014-10-18
    • 1970-01-01
    相关资源
    最近更新 更多