我正在使用以下课程从黑莓手机获取GPS位置,但我总是获得零长度和纬度值。那是为什么?
public class LocationTracker extends TimerTask {
private double longitude;
private double latitude;
private double altitude;
private LocationProvider lp;
public LocationTracker() {
super();
// Set criteria for selecting a location provider:
Criteria cr = new Criteria();
cr.setCostAllowed(true);
cr.setPreferredResponseTime(60);
cr.setHorizontalAccuracy(Criteria.NO_REQUIREMENT);
cr.setVerticalAccuracy(Criteria.NO_REQUIREMENT);
cr.setAltitudeRequired(true);
cr.isSpeedAndCourseRequired();
cr.isAddressInfoRequired();
cr.setPreferredPowerConsumption(Criteria.POWER_USAGE_HIGH);
try {
LocationProvider lp = LocationProvider.getInstance(cr);
Location location = null;
try {
location = lp.getLocation(-1);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (LocationException e){
System.out.println(e.toString());
}catch(Exception e ){
System.out.println(e.toString());
}
longitude = location.getQualifiedCoordinates().getLongitude();
latitude = location.getQualifiedCoordinates().getLatitude();
altitude = location.getQualifiedCoordinates().getAltitude();
if (lp != null) {
lp.reset();
lp.setLocationListener(null, -1, -1, -1);
lp = LocationProvider.getInstance(cr);
lp.setLocationListener(new MyLocationListener(), 2, -1, -1);
}
System.out.println("Lon" + longitude + " Lat "+ latitude);
} catch (LocationException le) {
System.out.println(le.toString());
}catch(Exception e ){
System.out.println(e.toString());
}
}
public void run() {
}
public double getLongitude() {
return longitude;
}
public double getLatitude() {
return latitude;
}
public double getAltitude() {
return altitude;
}
private class MyLocationListener implements LocationListener {
public void locationUpdated(LocationProvider provider, Location location) {
if (location != null && location.isValid()) {
QualifiedCoordinates qc = location.getQualifiedCoordinates();
try {
latitude = qc.getLatitude();
longitude = qc.getLongitude();
altitude = qc.getAltitude();
} catch (Exception e) {
System.out.println(e.toString());
}
}
}
public void providerStateChanged(LocationProvider provider, int newState) {
// TODO: if provider was disabled, then disable reporting
}
}
}
答案 0 :(得分:3)
您是否从设置中检查了GPS状态?如果它正在工作,请尝试将超时值设置为大约300秒而不是-1。
答案 1 :(得分:1)
LocationProvider
可能会返回Location
个isValid()
{{}}}对象。这样做是为了通过getExtraInfo()
方法提供额外的信息。