0
What is the best way to get latitude and longitude on android. Ex. after the request (tap the button) the user waits for the gps to get the coordinates and after that displays them for the same.
0
What is the best way to get latitude and longitude on android. Ex. after the request (tap the button) the user waits for the gps to get the coordinates and after that displays them for the same.
1
Well, there are several ways, I’ll give you one:
First you create a service to get latitude and longitude, then just instantiate it when you click on a button to get the coordinates.
public class GPSTracker extends Service implements LocationListener {
private final Context mContext;
// flag para GPS status
boolean isGPSEnabled = false;
// flag para network status
boolean isNetworkEnabled = false;
// flag para GPS status
boolean canGetLocation = false;
Location location; // location
double latitude; // latitude
double longitude; // longitude
// A distância mínima para mudar Atualizações em metros
private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 0; // 10 metros
// O tempo mínimo entre as atualizações em milissegundos
private static final long MIN_TIME_BW_UPDATES = 0; // 1 minute=1000 * 60 * 1
// Declarar a Location Manager
protected LocationManager locationManager;
public GPSTracker(Context context) {
this.mContext = context;
getLocation();
}
public Location getLocation() {
try {
locationManager = (LocationManager) mContext
.getSystemService(LOCATION_SERVICE);
// obter o status GPS
isGPSEnabled = locationManager
.isProviderEnabled(LocationManager.GPS_PROVIDER);
// obter o status da rede
isNetworkEnabled = locationManager
.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
if (!isGPSEnabled && !isNetworkEnabled) {
//Nenhum provedor de rede está habilitado
} else {
this.canGetLocation = true;
// Primeiro localização obter de provedor de rede
if (isNetworkEnabled) {
locationManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
Log.d("Network", "Network");
if (locationManager != null) {
location = locationManager
.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if (location != null) {
latitude = location.getLatitude();
longitude = location.getLongitude();
}
}
}
// if GPS Enabled get lat/long using GPS Services
if (isGPSEnabled) {
if (location == null) {
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
Log.d("GPS Enabled", "GPS Enabled");
if (locationManager != null) {
location = locationManager
.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (location != null) {
latitude = location.getLatitude();
longitude = location.getLongitude();
}
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return location;
}
//eric
/**
* para de usar GPS listener
* Calling this function will stop using GPS in your app
* */
public void stopUsingGPS(){
if(locationManager != null){
locationManager.removeUpdates(GPSTracker.this);
}
}
/**
* Function para obter latitude
* */
public double getLatitude(){
if(location != null){
latitude = location.getLatitude();
}
// return latitude
return latitude;
}
/**
* Function para obetr longitude
* */
public double getLongitude(){
if(location != null){
longitude = location.getLongitude();
}
// return longitude
return longitude;
}
/**
* Função para verificar GPS / Wi-Fi habilitado
* @return boolean
* */
public boolean canGetLocation() {
return this.canGetLocation;
}
/**
* Function para abrir o alerta
* */
public void showSettingsAlert(){
AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext);
// titulo da mensagem de config
alertDialog.setTitle("Configurar GPS");
// mensagem de configuração
alertDialog.setMessage("GPS não Ativado. Você deseja abrir o menu de configuração?");
// On pressing Settings button
alertDialog.setPositiveButton("Configuração", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
mContext.startActivity(intent);
}
});
// btn cancelar
alertDialog.setNegativeButton("Cancelar", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
// Exibir alerta de mensagem
alertDialog.show();
}
@Override
public void onLocationChanged(Location location) {
getLocation();
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public IBinder onBind(Intent arg0) {
return null;
}
}
And then to get the data into your MainActivity
, for example (by clicking a button):
// clicando no botao
btnShowLocation.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// instancia o service, GPSTracker gps
gps = new GPSTracker(MainActivity.this);
// verifica ele
if (gps.canGetLocation()) {
// passa sua latitude e longitude para duas variaveis
double latitude = gps.getLatitude();
double longitude = gps.getLongitude();
// e mostra no Toast
Toast.makeText(getApplicationContext(), "Sua localização - \nLat: " + latitude + "\nLong: " + longitude, Toast.LENGTH_LONG).show();
}
}
});
And remember, don’t forget the permissions:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
OK @Alessandro Barreto, quiet, but if the service does not have the coordinates "for some reason" at click time, as I resgato them after the gps get the data, in my Activity?
I tried to use more gave Location lat and long 0.0
I tried to use here too, but I was returned 0.0 in both cases
Browser other questions tagged java android
You are not signed in. Login or sign up in order to post.
You yourself did not get an answer here?
– Paulo Rodrigues