Я пытаюсь определить наиболее точное местоположение устройства в кратчайшие сроки.
Я сохраняю данные как геопункт и отображаю их в виде карты.
В последний раз, когда я активировал GPS на своем устройстве и позволил ему заблокировать местоположение, я находился примерно в 80 милях от того места, где я сейчас нахожусь.
У меня есть менеджер местоположения и слушатель местоположения.
Если я сделаю это, я получу NULL.
myLocOverlay = new MyLocationOverlay(this, mapView);
GeoPoint test = myLocOverlay.getMyLocation();
но в следующей паре строк;
myLocOverlay.enableMyLocation();
mapView.getOverlays().add(myLocOverlay);
При этом наложение на карту показывает текущее местоположение. Он использует сетевой провайдер, но также пытается получить GPS-решение (не может, поскольку я нахожусь в помещении и не на верхнем этаже).
Если я построю геопункт таким образом;
if(lm.getLastKnownLocation("gps") != null)
{
test = new GeoPoint(
(int) (lm.getLastKnownLocation("gps").getLatitude() * 1E6),
(int) (lm.getLastKnownLocation("gps").getLongitude() * 1E6));
}
else
{
if(lm.getLastKnownLocation("network") != null)
{
test = new GeoPoint(
(int) (lm.getLastKnownLocation("network").getLatitude() * 1E6),
(int) (lm.getLastKnownLocation("network").getLongitude() * 1E6));
}
//bad things
}
Тогда я получаю запутанные результаты. Если я отключаю провайдера GPS устройств, то код переходит на провайдера сети и дает мне довольно точный результат. Если я включу провайдера GPS, геопункт возвращается как последнее место, где я позволил устройству получить блокировку GPS.
Я хочу избежать вышеупомянутых результатов, и поэтому хотел использовать;
GeoPoint test = myLocOverlay.getMyLocation();
НО, как я сказал выше, я просто получаю NULL от этого.
Если не считать гео-точек из GPS и сети, а затем сравнивать их и игнорировать результат GPS, если он находится, скажем, в 1 миле от местоположения в сети - я немного застрял. почему getMyLocation () не работает, разве это не должно возвращать GeoPoint того, что myLocOverlay показывает на виде карты?