Se si desidera acquisire la posizione su un pulsante, ecco come si farebbe. Se l'utente non ha un servizio di localizzazione abilitato, questo li invierà al menu delle impostazioni per attivarlo.
Innanzitutto, è necessario aggiungere l'autorizzazione "android.permission.ACCESS_COARSE_LOCATION" al manifest. Se avete bisogno di GPS (percorso di rete non è abbastanza sensibile), aggiungere l'autorizzazione "android.permission.ACCESS_FINE_LOCATION", invece, e cambiare il "Criteria.ACCURACY_COARSE" a "Criteria.ACCURACY_FINE"
Button gpsButton = (Button)this.findViewById(R.id.buttonGPSLocation);
gpsButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// Start loction service
LocationManager locationManager = (LocationManager)[OUTERCLASS].this.getSystemService(Context.LOCATION_SERVICE);
Criteria locationCritera = new Criteria();
locationCritera.setAccuracy(Criteria.ACCURACY_COARSE);
locationCritera.setAltitudeRequired(false);
locationCritera.setBearingRequired(false);
locationCritera.setCostAllowed(true);
locationCritera.setPowerRequirement(Criteria.NO_REQUIREMENT);
String providerName = locationManager.getBestProvider(locationCritera, true);
if (providerName != null && locationManager.isProviderEnabled(providerName)) {
// Provider is enabled
locationManager.requestLocationUpdates(providerName, 20000, 100, [OUTERCLASS].this.locationListener);
} else {
// Provider not enabled, prompt user to enable it
Toast.makeText([OUTERCLASS].this, R.string.please_turn_on_gps, Toast.LENGTH_LONG).show();
Intent myIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
[OUTERCLASS].this.startActivity(myIntent);
}
}
});
mia classe esterna ha questo listener impostato
private final LocationListener locationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
[OUTERCLASS].this.gpsLocationReceived(location);
}
@Override
public void onProviderDisabled(String provider) {}
@Override
public void onProviderEnabled(String provider) {}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {}
};
Quindi, quando si desidera interrompere l'ascolto chiamare questo. Dovresti almeno effettuare questa chiamata durante il metodo onStop della tua attività.
LocationManager locationManager = (LocationManager)this.getSystemService(Context.LOCATION_SERVICE);
locationManager.removeUpdates(this.locationListener);
Il secondo parametro su getBestProvider (locationCritera, true) controlli che i fornitori sono abilitato, quindi, in teoria, non è necessario controllare se è abilitato di nuovo. – Eduardo