我正在使用谷歌播放服务api在我的应用程序中获取位置更新。但是,由于某些原因,客户端.getLastLocation()在连接客户端时不会更改其值。只有在通过注册侦听器请求位置更新之后,位置才会更改。我认为这可能只是模拟器的问题,但即使我使用ddms或telnet手动更改位置,getLastLocation()的值仍然不会改变。
不幸的是,我的手机没有出现在广告中,所以我无法在实际设备上测试它,但有人知道为什么会发生这种情况吗?这没什么大不了的,因为我可以通过请求位置更新来解决这个问题,但我想提供一个设置,允许用户手动更新他们的位置,而不是每隔几秒钟上传一次。一些代码来显示我在说什么。
@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中设置的,由用户设置。
有人知道我该怎么办吗?我觉得我错过了一些简单的东西。
之所以会发生这种情况,是因为getLastLocation
是一个非阻塞的、支持电池的调用,用于获取最后一个已知位置(这可能是旧值),并且当没有任何东西在主动检索位置更新时,它不会神奇地改变。
根据用户请求获取位置的最佳方法是开始请求位置更新,并在获得第一个位置时停止。