last - location manager android example
ICS Android habilita gps programáticamente? (4)
Tienes que pedir permiso al usuario:
Intent gpsOptionsIntent = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(gpsOptionsIntent);
Sé que esta pregunta se ha hecho mucho aquí, pero me pregunto desde que ICS salió a la venta, ¿hay alguna forma de habilitar gps programáticamente?
Estoy tratando de habilitar GPS y enviar la ubicación del dispositivo a un correo electrónico, la aplicación se iniciará cuando reciba un mensaje de SMS.
¿Hay alguna manera de habilitar gps programáticamente?
Espero que no, ya que sería un defecto de privacidad. AFAIK, todos los agujeros conocidos que permitían que el malware habilitara GPS programáticamente ahora se han cerrado.
Estoy tratando de habilitar gps y enviar la ubicación del dispositivo a un correo electrónico
El usuario controla si el GPS está habilitado o no.
Como dijo Mark, espero que no porque encender las cosas que el usuario quiere no sea algo muy agradable de hacer ;-)
Puede pedirle al usuario que lo haga, por supuesto (que probablemente ya haya encontrado, pero para referencia aquí hay una manera trivial de hacerlo desde la memoria)
LocationManager L = (LocationManager) getSystemService(LOCATION_SERVICE);
if (!L.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
Intent I = new Intent(
android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(I);
}
Para solicitarle al usuario que active el GPS, consulte este enlace
Debajo se encuentran las entrañas de una función que intenta obtener la última ubicación de GPS conocida en orden de precisión descendente. Si el usuario no tiene GPS habilitado, no puede habilitarlo. Lo mejor que puede hacer es tomar la última ubicación conocida o solicitarles que activen el GPS. Cada vez que el usuario usa el GPS en otra aplicación y obtiene una nueva coordenada, o se conecta a una red inalámbrica, la última ubicación conocida cambiará. Supongo que podría escribir un servicio en segundo plano que sondee esta información cada 5-10 minutos y se la envíe a usted. Aunque, no estoy de acuerdo con la dirección en la que parece que se dirige con esta aplicación. lol. ¡Para la ciencia!
LocationManager lm = (LocationManager)act.getSystemService(Context.LOCATION_SERVICE);
Criteria crit = new Criteria();
crit.setAccuracy(Criteria.ACCURACY_FINE); String provider = lm.getBestProvider(crit, true);
Location loc = lm.getLastKnownLocation(provider);
if(loc){
return loc;
}
lm = (LocationManager)act.getSystemService(Context.LOCATION_SERVICE);
crit = new Criteria();
crit.setAccuracy(Criteria.ACCURACY_COARSE);
provider = lm.getBestProvider(crit, true);
loc = lm.getLastKnownLocation(provider);
if(loc){
return loc;
}
lm = (LocationManager)act.getSystemService(Context.LOCATION_SERVICE);
crit = new Criteria();
crit.setAccuracy(Criteria.NO_REQUIREMENT);
provider = lm.getBestProvider(crit, true);
loc = lm.getLastKnownLocation(provider);
return null;