我想获得准确和准确的当前位置。为此,我使用了位置管理器requestLocationUpdates()
方法,但调用该onLocationChanged()
方法将花费大量时间。所以我将计时器设置为 20 秒。我的意思onLocationChanged()
是即使在 20 秒后也没有调用方法,然后我决定采用最后一个已知位置。在这里,我面临着问题。getLastKnownLocation()
返回空值。
但我想要位置。在这里,我找到了一个解决方案。这是因为测试设备没有与 gps 提供商的最新位置更新。所以我们需要手动打开地图/导航应用程序,然后它会返回位置。我们应该做什么来获取位置而不是打开地图应用程序。我认为我们应该像地图应用一样进行位置更新。我们如何在不打开它的情况下实现这样的功能。
// 使用 requestLocationUpdates 获取当前位置
public void getLocation() {
locationManager.requestLocationUpdates(strProvider, 0, 0,
CurrentlocationListener);
}
LocationListener CurrentlocationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
if (location != null) {
locationManager.removeUpdates(this);
double lat = location.getLatitude();
double lng = location.getLongitude();
String strCurrentLatitude = String.valueOf(lat);
String strCurrentLongitude = String.valueOf(lng);
System.out
.println("Current Latitude and Longitude(onLocation Changed): "
+ strCurrentLatitude
+ ","
+ strCurrentLongitude);
}
}
@Override
public void onProviderDisabled(String provider) {}
@Override
public void onProviderEnabled(String provider) {}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {}
};
//使用lastknownlocation获取当前位置。
String location_context = Context.LOCATION_SERVICE;
locationManager = (LocationManager) getSystemService(location_context);
Criteria crit = new Criteria();
crit.setAccuracy(Criteria.ACCURACY_FINE);
strProvider = locationManager.getBestProvider(crit, true);
Location location = locationManager
.getLastKnownLocation(strProvider);
System.out.println("location(geoPoint1): " + location);
String strCurrentLatitude = "0", strCurrentLongitude = "0";
if (location != null) {
strCurrentLatitude = String.valueOf(location
.getLatitude());
strCurrentLongitude = String.valueOf(location
.getLongitude());
}