2013-06-22 7 views
7

Я tring, чтобы получить местоположение из gps/netwrok лучшим провайдером, но всегда он возвращается в том же месте, также я вижу, что на карте Google есть знак справа от меня место нахождения. пожалуйста, кто-нибудь может сказать мне, что я делаю неправильно?getLastKnownLocation() всегда возвращает то же местоположение

Моя активность:

public class MainMenu2 extends Activity implements LocationListener, OnClickListener 

на моем OnCreate у меня есть: метод

if(isGooglePlay()){ 
     setContentView(R.layout.menu_2); 
     setUpMapIfNeeded(); 
    } 

isGooglePlay:

private boolean isGooglePlay() { // looks if googlemaps is available 

    int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this); 
    if(status == ConnectionResult.SUCCESS){ 
     return true; 
    } 
    else{ 
     ((Dialog) GooglePlayServicesUtil.getErrorDialog(status, this, 10)).show(); 
     //Toast.makeText(this, "Google Play is not available", Toast.LENGTH_SHORT).show(); 
     return(false); 
    } 

}//isGooglePlay 

setUpMapIfNeeded метод:

private void setUpMapIfNeeded() { 
// Do a null check to confirm that we have not already instantiated the map. 
if (mMap == null) { 
    mMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.menu_map)) 
         .getMap(); 
    // Check if we were successful in obtaining the map. 
    if (mMap != null) { 
     // The Map is verified. It is now safe to manipulate the map. 
     mMap.setMyLocationEnabled(true); 

     locationManager = (LocationManager) this.getSystemService(LOCATION_SERVICE); 
     Criteria criteria = new Criteria(); 
     criteria.setAccuracy(ACCURACY_FINE); 
     provider = locationManager.getBestProvider(criteria, true); 

     if (provider == null){ 
      onProviderDisabled(provider); 
     } 
     locationManager.requestLocationUpdates(provider, 100, 1, this); 
     loc = locationManager.getLastKnownLocation(provider); 
      //---here the privider is "gps" but always the same location---// 
     if (loc != null){ 
      onLocationChanged(loc); 
     } 
     mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); // set Map Type 
    } 
} 
}//setUpMap 

и переопределять методы:

@Override 
public void onLocationChanged(Location location) { 
// TODO Auto-generated method stub 
LatLng latlng = new LatLng(location.getLatitude(),location.getLongitude()); 
mMap.moveCamera(CameraUpdateFactory.newLatLng(latlng)); 
mMap.animateCamera(CameraUpdateFactory.zoomTo(10)); 

double pLong = location.getLongitude(); 
double pLat = location.getLatitude(); 
Latstr = String.valueOf(pLong); 
Lngstr = String.valueOf(pLat); 
latitude = pLat; 
longitude = pLong; 
} 

@Override 
public void onProviderDisabled(String provider) { 
    // TODO Auto-generated method stub 
    Toast.makeText(this, "Please turn ON the GPS", Toast.LENGTH_SHORT).show(); 
} 

@Override 
public void onProviderEnabled(String provider) { 
    // TODO Auto-generated method stub 
} 

@Override 
public void onStatusChanged(String provider, int status, Bundle extras) { 
// TODO Auto-generated method stub 

} 

@Override 
protected void onPause() { 
    super.onPause(); 
    locationManager.removeUpdates(this); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    myLatLng = new LatLng(latitude,longitude); 
    CameraUpdate update = CameraUpdateFactory.newLatLngZoom(myLatLng, 15); 
    mMap.animateCamera(update); 
    mMap.addMarker(new MarkerOptions().position(new LatLng(latitude,longitude)).title("Find me here!")); 


} 

я также пытался искать здесь проблемы similer, но я не получил ничего ..

+0

вы смешиваете новые API и стара для getLastLocation следовать этому https://stackoverflow.com/a/48033659/4997704 –

ответ

7

Существует ошибка с LocationProvider на некоторых платформах, таких как Samsung, пользовательские Android строить. Вы должны вызвать этот код (который фактически ничего не делает), который заставляет фоновый кеш телефона обновлять текущее местоположение.

Если вы не верите мне, измените свою позицию Gps на другое место примерно в 200 метрах, загрузите приложение, вы не заметите, что местоположение GPS изменилось. Теперь просто загрузите приложение Карты на свой телефон, и вдруг ваше приложение покажет текущее местоположение.

Для этого триггер программно помещает эти строки непосредственно перед вызовом getLastKnownLocation.

HomeScreen.getLocationManager().requestLocationUpdates(
    LocationManager.NETWORK_PROVIDER, 0, 0, new LocationListener() { 
     @Override 
     public void onStatusChanged(String provider, int status, Bundle extras) { 
     } 
     @Override 
     public void onProviderEnabled(String provider) { 
     } 
     @Override 
     public void onProviderDisabled(String provider) { 
     } 
     @Override 
     public void onLocationChanged(final Location location) { 
     } 
    }); 

Редактировать

ИЛИ

использовать новый API, LocationClient вместо LocationProvider.

+0

спасибо вам чепец !! вы много помогли мне через несколько дней на этой ошибке. Я предполагаю, что «HomeScreen.getLocationManager()« вы имеете в виду моего локатора? –

+0

Да. Я имею в виду LocationManager. И это большая ошибка жопы, которую очень сложно поймать. Мне потребовалось 2 недели, чтобы выяснить, так как для тестирования мне пришлось выбраться и пройти 200 м по крайней мере :) – Siddharth

+0

http://developer.samsung.com/forum/board/thread/view.do?boardName=GeneralB&messageId=233508&startId= zzzzz ~ & searchType = TITLE & searchText = getlastknownlocation Нет ответа от samsung на эту ошибку. Нет места для разработчиков, таких как мы, чтобы отправлять ошибки на samsung. Если вы разместите его на google, то очевидно, что он закрывает его. – Siddharth