LocationClient不会在模拟器上更新getLastLocation()

时间:2013-06-23 21:56:17

标签: android android-emulator location

我正在使用google play services api在我的应用中获取位置更新。但是,由于某种原因,client.getLastLocation()在连接客户端时不会更改其值。只有在通过注册侦听器请求位置更新后,位置才会更改。我认为它可能只是一个模拟器问题,但即使我使用ddms或telnet手动更改位置,getLastLocation()的值仍然不会改变。

不幸的是,我的手机没有显示在adb中,所以我无法在实际设备上测试它,但是有没有人知道为什么会发生这种情况?这不是什么大不了的事,因为我可以通过请求位置更新来解决它,但我想提供一个设置,允许用户手动更新其位置,而不是每隔几秒上传一次。一些代码显示我正在谈论的内容。

@Override
public void onClick(View v) {
    Location newLocation = client.getLastLocation();
    if(newLocation == null)
    {
        Toast.makeText(getActivity(), "Finding location", Toast.LENGTH_SHORT).show();
        return;
    }
    if(distanceSignificant(currentLocation, newLocation))
    {
        currentLocation = newLocation;
        Log.d(TAG, "distance significant, updating location");
            uploadNewLocation();
        }
    }
});

每次点击该按钮,其位置都与上次相同。

@Override
public void onConnected(Bundle data) {
    Log.d(TAG, "connected to locations");
    Toast.makeText(getActivity(), "Starting location services", Toast.LENGTH_SHORT).show();
    currentLocation = client.getLastLocation();

    if(currentLocation == null)
    {
        Log.d(TAG, "can't add user location yet, not available");
    }

    if(shouldUpdate)
    {
        client.requestLocationUpdates(locationRequest, this);
        updateButton.setVisibility(View.GONE);
    }
    else
    {
        updateButton.setVisibility(View.VISIBLE);
    }

}

在这种情况下,shouldUpdate在onCreateView中设置,并由用户设置设置。

有谁知道我该怎么做才能解决这个问题?我觉得我错过了一些简单的东西。

1 个答案:

答案 0 :(得分:3)

这种情况发生是因为getLastLocation是一个无阻塞,专业电池调用来获取最后一个已知位置(这可能是旧值),当没有任何主动检索位置更新时,它不会被神奇地改变。

根据用户请求获取位置的最佳方法是开始请求位置更新,并在获得第一个位置时停止更新。