|
||
|
![]() |
![]() |
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 |
![]() |
|
Herramientas |
#1
|
||||
|
||||
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(); } } Código:
GeoPoint point = new GeoPoint((int) (location.getLatitude() * 1E6), (int) (location.getLongitude() * 1E6)); |
|
#2
|
||||
|
||||
Código:
public void onLocationChanged(Location location) { if(location!=null) updateLocation(location); } No se si me explico pero prueba y di si funciona! |
Gracias de parte de: | ||
#3
|
||||
|
||||
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
|
#4
|
||||
|
||||
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??
|
#5
|
||||
|
||||
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? 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); } } |
#6
|
||||
|
||||
mm no me cierra la app, es que de hecho no pasa al public void onProviderDisabled
|
#7
|
||||
|
||||
cuando llega a
Código:
updateLocation(locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER)); |
#8
|
||||
|
||||
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??? |
#9
|
||||
|
||||
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. |