我在我的应用程序中使用以下代码,从教程等,以获得GPS的最佳位置修复(或者如果GPS未打开,网络),然后我将其显示在文本字段中。
crit = new Criteria();
context = Context.LOCATION_SERVICE;
locationManager = (LocationManager) this.getSystemService(context);
crit.setAccuracy(Criteria.ACCURACY_FINE);
crit.setPowerRequirement(Criteria.POWER_LOW);
crit.setAltitudeRequired(false);
crit.setBearingRequired(false);
crit.setSpeedRequired(false);
crit.setCostAllowed(false);
try {
bestProvider = locationManager.getBestProvider(crit, true);
loc = locationManager.getLastKnownLocation(bestProvider);
locationManager.requestLocationUpdates(bestProvider, 0, 0,
new GeoUpdateHandler());
} catch (java.lang.RuntimeException run) {
Toast.makeText(getBaseContext(),
"Waiting for location fix...", Toast.LENGTH_SHORT).show();
}
我的问题是在不同地点之间移动。我开始在诺福克使用我的应用程序,并获得位置确定。第二天,我在康沃尔(相距100英里),当我打开我的应用程序时(它应该已经被Android关闭/销毁),它仍然显示诺福克的位置。我发现,如果我退出我的应用程序并再次启动它,它会选择新的位置。我可以轻松地做到这一点,但我的用户发现这真的很痛苦。
我的假设是,如果GPS /网络可用,那么我启动应用程序,LOC是从上一个已知位置创建的,然后locationManager立即更新(应该立即更新LOC?)使用:
public class GeoUpdateHandler implements LocationListener {
public void onLocationChanged(Location location) {
loc = location;
}
public void onProviderDisabled(String provider) { }
public void onProviderEnabled(String provider) { }
public void onStatusChanged(String provider, int status, Bundle extras) { }
}
显然,这次更新没有发生。
任何人都可以告诉我,如果我的代码是愚蠢的,或建议更好的方法来确保我总是处理当前的位置?谢谢。如果这个问题得到解答,请在所有地点的帖子中找不到道歉。 requestLocationUpdates标签。
答案 0 :(得分:2)
在聊天讨论后,我建议如下:
您需要致电requestLocationUpdates()
,然后向用户显示一个类似“获取您的位置”的对话框。稍后,您应该获得具有最新位置的回调onLocationChanged()
。此时,您可以关闭对话框并更新文本字段以及您要向用户显示的任何其他内容。一旦获得最新位置,您也应该致电removeUpdates()
,这样就不会耗尽用户的电池。