Всегда возвращать ноль, когда я пытаюсь получить мое местоположение - PullRequest
0 голосов
/ 08 декабря 2011

Я пытаюсь получить местоположение mi (по gps или wifi, то же самое), и никогда не получает, если я отлаживаю, есть ошибка в методе gotLocation ().Я пытаюсь с множеством методов всегда один и тот же результат: Вот мой класс

public void onCreate(Bundle savedInstanceState) {     
    super.onCreate(savedInstanceState);   
    setContentView(R.layout.editarlugar);   

    TextView eNombre = (TextView) findViewById(R.id.eNombre);
    TextView eDesc = (TextView) findViewById(R.id.eDesc);
    ImageView eFoto = (ImageView) findViewById(R.id.iFoto);
    eMapa = (MapView) findViewById(R.id.editarMapa);





     /********************
     * Obtengo los datos del item, con intent procedente 
     * de otro activity   y tambien digo que tipo de accion es: Crear o Editar     
     *********************/

      final Bundle extras = getIntent().getExtras();
       String nombreClick = null;

      if(extras!=null){
                 nombreClick = extras.getString("nombre");
                 estado = 2;//Estoy editando
                 Editando(nombreClick,eNombre,eDesc,eFoto);

             }  


    /********************************************************************************** 
     * Instanciamos el mapa de google
     * Le ponemos controles de zoom
     **********************************************************************************/

   eMapa.setBuiltInZoomControls(true);
   eMapa.displayZoomControls(true);
   eMapa.setClickable(true);
   controladorMapa = eMapa.getController();

   //Nos geolizaliza y setea el geopunto yo
   encuentrame();
   OverlayItem [] listaPuntos = {
           new OverlayItem(yo, "Estas aqui", "Marcado!"),
       };
   dibujaPuntos();




}


private void encuentrame() {
            miPosicion.obtenLocalizacion(this, locationResult);
        }

public LocationResult locationResult = new LocationResult(){
            @Override
            public void gotLocation(final Location location){

                    if( location == null ){
                        //No hagas nada
                    }else{
                        latitud = location.getLatitude();
                        longitud = location.getLongitude();

                         yo = new GeoPoint((int)(latitud * 1E6), (int)(longitud * 1E6));
                    }

                };
        };      



public void dibujaPuntos(){ 
    misPuntos = eMapa.getOverlays();    
    imagen = this.getResources().getDrawable(R.drawable.yo); 
    punto = new MyItemizedOverlay(imagen); 
    misPuntos.add(punto);

}

/************************
 * Metodo obligatorio
 * 
 **********************/

@Override
protected boolean isRouteDisplayed() {
    return false;
}





}

И это класс местоположения

// Script copiada de stackoverlow получает отсюда

public boolean obtenLocalizacion(Context context, LocationResult result)
{
    //Uso LocationResult para devolver la localizacion a otras clases
    locationResult=result;
    if(lm==null)
        lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);

    //Excepciones no permitidas
    try{gps_enabled=lm.isProviderEnabled(LocationManager.GPS_PROVIDER);}catch(Exception ex){}
    try{network_enabled=lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);}catch(Exception ex){}

    //No se inician listeners hasta que no esta encendido ningun provider
    if(!gps_enabled && !network_enabled)
        return false;

    if(gps_enabled)
        lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, porGPS);
    if(network_enabled)
        lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, porWifi);
    timer1=new Timer();
    timer1.schedule(new obtenUltimaLoc(), 20000);
    return true;
}

LocationListener porGPS = new LocationListener() {
    public void onLocationChanged(Location location) {
        timer1.cancel();
        locationResult.gotLocation(location);
        lm.removeUpdates(this);
        lm.removeUpdates(porWifi);
    }
    public void onProviderDisabled(String provider) {}
    public void onProviderEnabled(String provider) {}
    public void onStatusChanged(String provider, int status, Bundle extras) {}
};

LocationListener porWifi = new LocationListener() {
    public void onLocationChanged(Location location) {
        timer1.cancel();
        locationResult.gotLocation(location);
        lm.removeUpdates(this);
        lm.removeUpdates(porGPS);
    }
    public void onProviderDisabled(String provider) {}
    public void onProviderEnabled(String provider) {}
    public void onStatusChanged(String provider, int status, Bundle extras) {}
};

class obtenUltimaLoc extends TimerTask {
    @Override
    public void run() {
         lm.removeUpdates(porGPS);
         lm.removeUpdates(porWifi);

         Location net_loc=null, gps_loc=null;
         if(gps_enabled)
             gps_loc=lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
         if(network_enabled)
             net_loc=lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

         if(gps_loc!=null && net_loc!=null){
             if(gps_loc.getTime()>net_loc.getTime())
                 locationResult.gotLocation(gps_loc);
             else
                 locationResult.gotLocation(net_loc);
             return;
         }

         if(gps_loc!=null){
             locationResult.gotLocation(gps_loc);
             return;
         }
         if(net_loc!=null){
             locationResult.gotLocation(net_loc);
             return;
         }
         locationResult.gotLocation(null);
    }
}

public static abstract class LocationResult{
    public abstract void gotLocation(Location location);
}

}

Из-за этого, когда я пытаюсь нарисовать мой olveralyitem, это не показывается, и если я делаю отладку, но нене вижу ошибки ... Так для всех

Я нахожу этот код

 MyLocationOverlay myLocationOverlay = new MyLocationOverlay(this, mapView);
    mapView.getOverlays().add(myLocationOverlay);
    myLocationOverlay.enableCompass(); // if you want to display a compass also
    myLocationOverlay.enableMyLocation();

, чтобы показать мое местоположение, это так просто

я заменил

OverlayItem [] listaPuntos = {new OverlayItem (yo, "Estas aqui", "Marcado!"),};dibujaPuntos ();

для этого

 MyLocationOverlay myLocationOverlay = new MyLocationOverlay(this, mapView);
    mapView.getOverlays().add(myLocationOverlay);
    myLocationOverlay.enableCompass(); // if you want to display a compass also
    myLocationOverlay.enableMyLocation();

и теперь это работает ..

как разместить маркер на карте, когда местоположение меняется в Android

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...