我几周来一直在搞乱gps功能,我有一个问题。我的目标是在点击按钮时保存gps位置,但是我听说gps需要一些时间来收听卫星才能获得精确的位置。我的程序记录其位置不到一秒钟,让我相信它实际上没有花时间。它记录的位置相当远,有时它甚至不再听新的位置,它只是告诉我,我在几个小时前的某个地方。我应该怎么做,现在我在点击按钮后立即调用requestLocationupdates(Location,0,0,loc_listener),我应该把它放在其他地方吗?(比如在我声明我的位置管理器之后?)
我真的很感激任何帮助。 感谢
这是我的创建方法
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
location = locationManager
.getLastKnownLocation(LocationManager.GPS_PROVIDER);
loc_listener = new LocationListener() {
@Override
public void onStatusChanged(String provider, int status,
Bundle extras) {
// TODO Auto-generated method stub
float locationAccuracy = location.getAccuracy();
if (locationAccuracy > 150) {
gpsStatus.setImageResource(gpsColor[0]);
} else if (locationAccuracy > 100) {
gpsStatus.setImageResource(gpsColor[1]);
} else {
gpsStatus.setImageResource(gpsColor[2]);
}
}
@Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
}
};
我在我的onbuttonclick方法中调用它
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER, 30000, 0,
loc_listener);
和
holder.put("lat", location.getLatitude());
holder.put("lon", location.getLongitude());
我应该做什么呢?感谢
答案 0 :(得分:0)
如果我是你,我会使用MyLocationOverlay
,这是为了获取用户的位置。
然后,您可以在获取位置时使用getMyLocation()
。
答案 1 :(得分:0)
答案 2 :(得分:0)
你为什么不使用这个功能:
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
}
知道位置何时发生变化?您可以在有任何更改时自行跟踪,并在您单击按钮时使用跟踪的位置,而不是再次请求更新。
来自文档:
onStatusChanged用于GPS上线/离线/暂时不可用/等
答案 3 :(得分:0)
您需要在搜索中进行分层才能获得最佳排名。现在,您只使用GPS提供商并利用网络提供商尝试找到您的位置。分层GPS位置在Obtaining User's Location部分“用于获取用户位置的流程”中进行了描述
现在与您的问题有关,点击按钮:
LocationManager lm = (LocationManager)activity.getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
String bestProvider = lm.getBestProvider(criteria, true);
Location locate = lm.getLastKnownLocation(bestProvider);
if (locate != null) {
// if current location is already within time to expire apart, then get current location
// Check if we have cached location in the last 2 minutes, use that cached if we have one
if(System.currentTimeMillis() - locate.getTime() > TIME_TO_EXPIRE) {
// cache is too old and we assume the user has moved since then, initiate GPS location update
} else {
// cache is not too old, we could call the locationListener here itself
locationListener.onLocationChanged(locate);
}
} else {
// Use GPS if no known cache is available. Wait for 7.5 secs for GPS lock
}
lm.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
MIN_TIME,
MIN_DISTANCE,
locationListener);
getLastKnownLocation
获得的位置更好。上面的Android开发人员链接有一个关于如何确定“维持当前最佳估计值”
// remove the previous listeners based on GPS
lm.removeUpdates(locationListener);
// now request a new one based on the network
lm.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER,
MIN_TIME,
MIN_DISTANCE,
locationListener);