Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android

Respuesta
 
Herramientas
  #1  
Viejo 11/05/12, 20:16:10
Array

[xs_avatar]
gohan0189 gohan0189 no está en línea
Miembro del foro
 
Fecha de registro: feb 2012
Mensajes: 190
Tu operador: TELCEL

geolocalizacion

hola estoy tratando de hacer una geolocalizacion tengo esto

Código:
import java.io.IOException;
import java.util.List;
import java.util.Locale;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;

import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Point;
import android.location.Address;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.view.View;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;

/**
 *
 * @author Inmobart
 */
public class GoogleMaps extends MapActivity implements LocationListener
{
    private static final String namespace = "http://tempuri.org/";
     private static String url="http://192.168.1.119/SAR/AutoHelpWS/AutoHelpWS.asmx";                    
     private static final String Metodo = "ReportarSiniestroAuto";
     private static final String accionSoap ="http://tempuri.org/ReportarSiniestroAuto";
    private MapView mapView;
    private TextView coordenadas;    
    private LocationManager locationManager;
    private MapController controlMapa = null;
    //private Mylocation itemizedoverlay;
    private Geocoder geoCoder;
    EditText edtxtpoliza,edtxtinciso,edtxtplacassiniestro;
    CheckBox checkdañopersona,checkdañoauto;    
    String latitud,longitud;
    
    class MyOverlay extends Overlay {
     GeoPoint point;
    
     public MyOverlay(GeoPoint point) {
     super();
     this.point = point;
     }
    
        @Override
        public boolean draw(Canvas canvas, MapView mapView, boolean shadow, long when) {
            super.draw(canvas, mapView, shadow);
 
            Point scrnPoint = new Point();
            mapView.getProjection().toPixels(this.point, scrnPoint);
 
            Bitmap marker = BitmapFactory.decodeResource(getResources(), R.drawable.marcador_google_maps);
            canvas.drawBitmap(marker,
             scrnPoint.x - marker.getWidth() / 2,
             scrnPoint.y - marker.getHeight() / 2, null);
            return true;
        }
    }
    
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.gps);
        
        mapView=(MapView) findViewById(R.id.map_view);
        coordenadas=(TextView) findViewById(R.id.tw_mensaje);
        edtxtpoliza=(EditText)findViewById(R.id.edtxtpoliza);
       edtxtinciso=(EditText)findViewById(R.id.edtxtinciso);      
       checkdañopersona=(CheckBox) findViewById(R.id.chdañopersona);
       checkdañoauto=(CheckBox) findViewById(R.id.chdañoauto);                  
       edtxtplacassiniestro=(EditText)findViewById(R.id.edtxtplacassiniestro); 
        mapView.setBuiltInZoomControls(true);
        
        locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 6000, 50, this);
        updateLocation(locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER));
        
        
    }

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

@Override
public void onLocationChanged(Location location) {
updateLocation(location);
}

@Override
public void onProviderDisabled(String provider) {
Intent intent = new Intent( android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(intent);
}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {}

@Override
public void onProviderEnabled(String provider) {}

protected void updateLocation(Location location){
        mapView = (MapView) findViewById(R.id.map_view);
        controlMapa = mapView.getController();                
        GeoPoint point = new GeoPoint((int) (location.getLatitude() * 1E6), (int) (location.getLongitude() * 1E6));
        Double lat=(Double) (location.getLatitude());
        Double lng=(Double) (location.getLongitude());
        latitud=String.valueOf(lat);
        longitud=String.valueOf(lng); 
        controlMapa.animateTo(point);
        controlMapa.setZoom(15);
        coordenadas.setText("Latitud:"+location.getLatitude()+"\nLongitud:"+location.getLongitude());         
        
        geoCoder = new Geocoder(this, Locale.getDefault());

        try {
            List<Address> addresses = geoCoder.getFromLocation(
                point.getLatitudeE6() / 1E6,
                point.getLongitudeE6() / 1E6, 1);
        

            String address = "";
            if (addresses.size() > 0) {
                for (int i = 0; i < addresses.get(0).getMaxAddressLineIndex(); i++)
                   address += addresses.get(0).getAddressLine(i) + "\n";
            }

            Toast.makeText(getBaseContext(), address, Toast.LENGTH_SHORT).show();
        }
        catch (IOException e) {
            e.printStackTrace();
        }
        
        List<Overlay> mapOverlays = mapView.getOverlays();
        MyOverlay marker = new MyOverlay(point);
        mapOverlays.add(marker);
        mapView.invalidate();
}
   }
pero cuando llega a

Código:
      GeoPoint point = new GeoPoint((int) (location.getLatitude() * 1E6), (int) (location.getLongitude() * 1E6));
location es null y me cierra mi app , en que estoy mal o que me hace falta???
Responder Con Cita


  #2  
Viejo 11/05/12, 21:24:56
Array

[xs_avatar]
monchyrcg monchyrcg no está en línea
Miembro del foro
 
Fecha de registro: sep 2011
Localización: Cartagena
Mensajes: 384
Modelo de smartphone: LG Optimus Black
Tu operador: Orange
 Cita: Originalmente Escrito por gohan0189 Ver Mensaje
public void onLocationChanged(Location location) {
updateLocation(location);
}
Yo cambiara esto por esto:
Código:
public void onLocationChanged(Location location) {
  if(location!=null)
     updateLocation(location);
}
Este método no tiene restricción y puede ser que la primera vez que arrancas la aplicación el gps aun no haya recibido señal por lo tanto location sera null.

No se si me explico pero prueba y di si funciona!
Responder Con Cita
Gracias de parte de:
  #3  
Viejo 11/05/12, 21:56:09
Array

[xs_avatar]
gohan0189 gohan0189 no está en línea
Miembro del foro
 
Fecha de registro: feb 2012
Mensajes: 190
Tu operador: TELCEL

oo tenias razon gracias!!!!!!. oie aprovechando si tengo mi app con una apikey de google maps y el archivo . apk que se crea lo copio en otro dispositivo y se ven los mapas significa que ya tengo apikey .apk y no la de debug??? o como se cual tengo?? o como saco ya la api para mi app
Responder Con Cita
  #4  
Viejo 11/05/12, 22:03:59
Array

[xs_avatar]
gohan0189 gohan0189 no está en línea
Miembro del foro
 
Fecha de registro: feb 2012
Mensajes: 190
Tu operador: TELCEL

oie tambien otra cosa cuando esta activado el gps del movil no hay problema pero cuando esta desactivado, no entra al onproviderdisabled, como le hago para activar el gps??
Responder Con Cita
  #5  
Viejo 11/05/12, 22:11:25
Array

[xs_avatar]
monchyrcg monchyrcg no está en línea
Miembro del foro
 
Fecha de registro: sep 2011
Localización: Cartagena
Mensajes: 384
Modelo de smartphone: LG Optimus Black
Tu operador: Orange
Si has creado tu apk y te funciona en otros moviles es que tienes una apiKey para poder publicar.

Igual que el otro, tendra que saber que provider se ha dado de baja para poder funcionar no?
 Cita: Originalmente Escrito por gohan0189 Ver Mensaje
public void onProviderDisabled(String provider) {
Intent intent = new Intent( android.provider.Settings.ACTION_LOCATION_SOURCE_S ETTINGS);
startActivity(intent);
}
Lo cambias por:
Código:
public void onProviderDisabled(String provider) {
if(provider.equals(Context.LOCATION_SERVICE){
Intent intent = new Intent( android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(intent);
}
}
Yo creo que te servira.
Responder Con Cita
  #6  
Viejo 11/05/12, 22:19:26
Array

[xs_avatar]
gohan0189 gohan0189 no está en línea
Miembro del foro
 
Fecha de registro: feb 2012
Mensajes: 190
Tu operador: TELCEL

mm no me cierra la app, es que de hecho no pasa al public void onProviderDisabled
Responder Con Cita
  #7  
Viejo 11/05/12, 22:33:59
Array

[xs_avatar]
gohan0189 gohan0189 no está en línea
Miembro del foro
 
Fecha de registro: feb 2012
Mensajes: 190
Tu operador: TELCEL

cuando llega a

Código:
 updateLocation(locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER));
es cuando me bota la app
Responder Con Cita
  #8  
Viejo 14/05/12, 18:44:59
Array

[xs_avatar]
gohan0189 gohan0189 no está en línea
Miembro del foro
 
Fecha de registro: feb 2012
Mensajes: 190
Tu operador: TELCEL

como le hago para que esta linea

updateLocation(locationManager.getLastKnownLocatio n(LocationManager.GPS_PROVIDER));
se espera a que se active el gps porque supongo que por eso me marca error o que estoys haciendo mal???
Responder Con Cita
  #9  
Viejo 14/05/12, 20:32:59
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
El getLastKnownLocation, como su propio nombre indica, utiliza el último valor conocido para el tipo de GPS que le has pasado.

Si quieres esperar a que el GPS fije la posición a la actual tienes que usar un LocationListener y en el método onLocationChanged poner el código para que ahí utilice el valor que has leído.

No se como de precisa querrás que sea tu localización, pero en la mayoría de los casos con NETWORK_PROVIDER es suficiente.

Ya para redondear puedes combinar el LocationListener con un Criteria, así el móvil elegirá automaticamente entre el GPS Real o el de Red según las necesidades. Yo ahora mismo es una cosa que tengo pendiente en una de mis aplicaciones, trasladar que esté forzado a NETWORK_PROVIDER por un Criteria.
Responder Con Cita
Respuesta

Estás aquí
Regresar   Portal | Indice > Todo sobre Android > Programación y Desarrollo para Android



Hora actual: 03:14:26 (GMT +2)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /