PDA

Ver la Versión Completa : ayudaa geolocalizacon muuy lenta!!


gohan0189
18/07/12, 23:35:24
Hola mi problema es que en mi app utilizo la geolocalizacion pero esta tarda demasiado , es por lo que utilizo o asi es??

asi esta mi codigo:


mport android.app.AlertDialog;
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.DialogInterface;
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.util.Log;
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://xxxxxxxx";
private static final String Metodo = "Reportar";
private static final String accionSoap ="http://tempuri.org/Reportar";
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);
edtxt1=(EditText)findViewById(R.id.edtxt1);
edtxt2=(EditText)findViewById(R.id.edtxt2);
checkdañopersona=(CheckBox) findViewById(R.id.chdañopersona);
checkdañoauto=(CheckBox) findViewById(R.id.chdañoauto);
edtxt3=(EditText)findViewById(R.id.edtxt3);
mapView.setBuiltInZoomControls(true);


locationManager = (LocationManager)getSystemService(Context.LOCATION _SERVICE);
locationManager.requestLocationUpdates(LocationMan ager.GPS_PROVIDER, 6000, 50, this);

}

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

@Override
public void onLocationChanged(Location location) {
if(location!=null)
updateLocation(location);
}

@Override
public void onProviderDisabled(String provider) {

Intent intent = new Intent( android.provider.Settings.ACTION_LOCATION_SOURCE_S ETTINGS);
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(30);
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();
}
o hay una manera para que lo realice mas rapido??

mocelet
19/07/12, 00:18:20
Había un artículo de alguien de Google muy interesante sobre la localización, creo recordar que primero consultaba la caché de localización por si ya había otras aplicaciones consultando los datos. Luego miraba la localización wifi para tener un rango más cerrado y ya finalmente esperaba las actualizaciones del GPS (que tardan más y debe ser lo que estás usando).

De todas formas hablo de memoria, no he usado localización todavía :)

Franco_MC
19/07/12, 18:39:52
Una pregunta antes de poder responder, cada cuanto quieres que se realice la lectura por distancia o por tiempo ? o quieres una combinación de ambos ?

gohan0189
19/07/12, 21:03:57
podria ser la memoria , talves ocupa muchos recursos la localizcion y por eso tarda mucho o que otros factores pudieran ser alguien sabe???

gohan0189
19/07/12, 21:05:04
pues mas bien seria cada que se oprima un boton es que me tiene que dar la localizacion

Franco_MC
20/07/12, 03:16:16
Te respondo un poco rapido mas tarde te paso un poco de codigo pero simple tu tienes unevento click para tu boton en ese evento vas a crear un criterio y este le pides que sea ACURRENCI_FINE y con este creas el location de este modo el sabra en cada click con que proveedor tiene la informacion, esto sera al instante, mas tarde te paso unas lineas de codigo para dejarte mas clara la idea.

gohan0189
20/07/12, 17:33:19
siii porfavor , si pudieras ayudarme con el codigo te lo agradeceria muchooo !!!!!!!!

Franco_MC
20/07/12, 19:07:10
public class MainActivity extends Activity {
/** Called when the activity is first created. */
LocationManager locationManager;
LocationListener locationListener;
Location location;
int cont = 0;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

Button boton = (Button) findViewById(R.id.button1);

boton.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {

locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
Criteria criterioProveedor = new Criteria();
criterioProveedor.setAccuracy(Criteria.ACCURACY_CO ARSE);
criterioProveedor.setAltitudeRequired(false);
criterioProveedor.setBearingRequired(false);
String strMejorProveedor = locationManager.getBestProvider(criterioProveedor, true);
location = locationManager.getLastKnownLocation(strMejorProve edor);
Toast.makeText(getApplicationContext(), "Latitude: "+location.getLatitude()+" Longitud: "+location.getLongitude(), Toast.LENGTH_LONG);
try{
if(location != null){
locationManager.requestLocationUpdates(LocationMan ager.GPS_PROVIDER, 1000, 0, locationListener);
Log.w("Localizacion", " La latitud es: "+location.getLatitude()+ " La longitud es: "+location.getLongitude());

}else{
location = locationManager.getLastKnownLocation(LocationManag er.NETWORK_PROVIDER);
Log.w("Localizacion"," La latitud es: "+location.getLatitude()+ " La longitud es: "+location.getLongitude());
locationManager.requestLocationUpdates(strMejorPro veedor, 1000, 0, locationListener);
}
}catch(NullPointerException e){

}
}
});

locationListener = new LocationListener() {

@Override
public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
// TODO Auto-generated method stub

}

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

}

@Override
public void onProviderDisabled(String arg0) {
// TODO Auto-generated method stub

}

@Override
public void onLocationChanged(Location arg0) {
// TODO Auto-generated method stub

}
};

}
}

solo recuerda que le tienes que dar permisos en el manifest

07-20 12:02:52.478: W/Localizacion(27292): La latitud es: 19.3692643 La longitud es: -99.2667669
07-20 12:02:52.708: W/Localizacion(27292): La latitud es: 19.3692643 La longitud es: -99.2667669
07-20 12:02:52.918: W/Localizacion(27292): La latitud es: 19.3692643 La longitud es: -99.2667669
07-20 12:02:53.158: W/Localizacion(27292): La latitud es: 19.3692643 La longitud es: -99.2667669
07-20 12:02:53.368: W/Localizacion(27292): La latitud es: 19.3692643 La longitud es: -99.2667669
07-20 12:02:53.588: W/Localizacion(27292): La latitud es: 19.3692643 La longitud es: -99.2667669
07-20 12:02:53.818: W/Localizacion(27292): La latitud es: 19.3692643 La longitud es: -99.2667669
07-20 12:02:54.078: W/Localizacion(27292): La latitud es: 19.3692643 La longitud es: -99.2667669
07-20 12:02:54.288: W/Localizacion(27292): La latitud es: 19.3692643 La longitud es: -99.2667669
07-20 12:02:54.488: W/Localizacion(27292): La latitud es: 19.3692643 La longitud es: -99.2667669
07-20 12:02:54.708: W/Localizacion(27292): La latitud es: 19.3692643 La longitud es: -99.2667669
07-20 12:02:54.948: W/Localizacion(27292): La latitud es: 19.3692643 La longitud es: -99.2667669
07-20 12:02:55.168: W/Localizacion(27292): La latitud es: 19.3692643 La longitud es: -99.2667669
07-20 12:02:55.358: W/Localizacion(27292): La latitud es: 19.3692643 La longitud es: -99.2667669
07-20 12:02:55.578: W/Localizacion(27292): La latitud es: 19.3692643 La longitud es: -99.2667669
07-20 12:02:55.788: W/Localizacion(27292): La latitud es: 19.3692643 La longitud es: -99.2667669
07-20 12:02:56.008: W/Localizacion(27292): La latitud es: 19.3692643 La longitud es: -99.2667669
07-20 12:02:56.238: W/Localizacion(27292): La latitud es: 19.3692643 La longitud es: -99.2667669
07-20 12:02:56.688: W/Localizacion(27292): La latitud es: 19.3692643 La longitud es: -99.2667669
07-20 12:02:56.948: W/Localizacion(27292): La latitud es: 19.3692643 La longitud es: -99.2667669
07-20 12:02:59.248: W/Localizacion(27292): La latitud es: 19.3692643 La longitud es: -99.2667669

estos son algunas lecturas del log para que te des una idea de la velocidad a la que se estan obteniendo los datos, bueno la velocidad a la que preciono el boton :)

Cualquier cosa quedo a tus ordenes

gohan0189
20/07/12, 20:15:49
ok, esto solo seria para recibir las coordenadas no??, pero si yo utilizo u mapview para poder utilizar la api de google maps??

gohan0189
20/07/12, 20:21:30
bueno es que no se si hayas checado el codigo que puse, talves basandonos en ese pudieras decirme que pudiera hacer para que fuera mas rapido o xq se tarda tanto en localizar??

Franco_MC
20/07/12, 21:19:08
El posicionamiento es el mismo lo unicoque hay que pasar las coordenadas al point mas tarde checo bien tu codigo pero tu problema era el listener que le pedias gps afuerza yque fuera de 60000 a 50 pero mas tarde te lo checo, quedo a tus ordenes

gohan0189
23/07/12, 18:13:56
si porfavor si puedes checrlo y decirme cual 4es mi error o que le puedo modificar t4e lo agradeceria

gohan0189
25/07/12, 18:36:46
aa de lo de que fuera gps a fuerza , asi tiene que ser xq la app que hice trabaja con el gps