我正在开发一个Android应用程序,其想法是用户登录并将表单发送到数据库。此表单还包含使用gps的用户的实际位置。
这是我正在使用的代码:
Oncreate - >
LocationManager locationManager = (LocationManager)
getSystemService(Context.LOCATION_SERVICE);
LocationListener locationListener = new MyLocationListener();
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 1, locationListener);
然后是班级 - >
class MyLocationListener implements LocationListener {
@Override
public void onLocationChanged(Location loc) {
long variance;
variance = age_minutes(loc);
if (variance < 1) {
Log.v("asdf","we are inside" + variance);
posH.longitude = String.valueOf(loc.getLongitude());
Log.v("asdf", posH.longitude);
posH.latitude = String.valueOf(loc.getLatitude());
Log.v("asdf", posH.latitude);
posH.valid = true;
} else {
Log.v("asdf","we are outside" + variance);
posH.valid = false;
}
}
问题在于它并不总是有效: 例如,我打开表单,我按下发送但是onlocationchanged没有被调用,直到我等待20秒,有时更多,有时从未调用,无论是否移动都无关紧要。
我想要一个允许我打开表单的方法,并自动获取当前的gps位置......
答案 0 :(得分:1)
您可以使用start with last know location,直到获得更多当前数据。
Location lastKnownLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
来自Android Location Strategies:
从移动设备获取用户位置可能很复杂。位置读取(无论源是什么)可能包含错误和不准确的原因有多种。用户位置中的一些错误来源包括:
多种位置来源 GPS,Cell-ID和Wi-Fi均可为用户提供线索位置。确定使用和信任哪个是在准确性,速度和电池效率方面的权衡问题。
用户移动 由于用户位置发生变化,因此您必须经常通过重新估算用户位置来考虑移动。
改变准确性 来自每个位置来源的位置估计值的准确性不一致。 10秒前从一个源获得的位置可能比来自另一个或相同源的最新位置更准确。 这些问题可能使得难以获得可靠的用户位置读数。