我制作了一款Android应用,可以通过点击按钮获取经度和纬度的位置。
首先,我得到最后一个已知的位置读数,为了论证,当我第一次加载应用程序/打开gps时,这是不准确的。
我想知道的是如何等待它准确无误,例如在Google地图中收到“等待位置”的祝酒消息时。
如果您发现可以改进代码的任何方式,它也会有所帮助。
参考代码:
public class Clue extends Activity {
public static double latitude;
public static double longitude;
Criteria criteria;
LocationManager lm;
LocationListener ll;
Location location;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.questions);
criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
ll = new MyLocationListener();
lm.requestLocationUpdates(lm.getBestProvider(criteria, true), 0, 0, ll);
}
private boolean weAreThere() {
location = getLocation();
longitude = location.getLongitude();
latitude = location.getLatitude();
return inCorrectPlace(param);
}
private Location getLocation() {
lm.requestLocationUpdates(lm.getBestProvider(criteria, true), 0, 0, ll);
return lm.getLastKnownLocation(lm.getBestProvider(criteria, true));
}
}
public class MyLocationListener implements LocationListener
{
public void onLocationChanged(Location loc)
{
Clue.longitude = loc.getLongitude();
Clue.latitude = loc.getLatitude();
}
}
感谢阅读,所有回复都将受到赞赏。
本
答案 0 :(得分:4)
如果Location.hasAccuracy()
返回true,您可以调用Location.getAccuracy()
来检索以米为单位的精度,然后过滤那些您认为不够准确的精度。
请注意,您没有使用LocationManager.GPS_PROVIDER
,因此您的修补程序也可以通过其他方式获取(例如WiFi)。
在获得GPS修复(室外)之前,通常希望GPS芯片能够“热”*一分钟。
*热,我的意思是卫星覆盖。一段时间后,一些芯片组断开连接(“冷”)以保留电池。芯片冷却时,首次定位时间(TTFF)更大。
答案 1 :(得分:2)
这是一个很好的解释,
http://android-developers.blogspot.com/2011/06/deep-dive-into-location.html
可帮助您准确了解如何实施它。
答案 2 :(得分:2)
最初,您应该使用getlastknownLocation ()
此外,U可以使用后台服务,使用NETWORK.PROVIDER来更新位置...如果明智地使用,它将不会耗尽你的电池......如果GPS关闭也可以使用
如果没有网络提供商,那么你应该尝试让用户打开GPS。
如果您使用2.2尝试PASSIVE PROVIDER