Segui i passaggi indicati di seguito
1) Crea un LocationRequest
secondo il tuo desiderio
LocationRequest mLocationRequest = LocationRequest.create()
.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
.setInterval(10 * 1000)
.setFastestInterval(1 * 1000);
2) Crea un fileLocationSettingsRequest.Builder
LocationSettingsRequest.Builder settingsBuilder = new LocationSettingsRequest.Builder()
.addLocationRequest(mLocationRequest);
settingsBuilder.setAlwaysShow(true);
3) Ottieni LocationSettingsResponse
Task
utilizzando il seguente codice
Task<LocationSettingsResponse> result = LocationServices.getSettingsClient(this)
.checkLocationSettings(settingsBuilder.build());
Nota: LocationServices.SettingsApi
è deprecato quindi, usa SettingsClient
invece.
4) Aggiungere a OnCompleteListener
per ottenere il risultato dall'attività. Al Task
termine, il client può controllare le impostazioni della posizione guardando il codice di stato LocationSettingsResponse
dall'oggetto.
result.addOnCompleteListener(new OnCompleteListener<LocationSettingsResponse>() {
@Override
public void onComplete(@NonNull Task<LocationSettingsResponse> task) {
try {
LocationSettingsResponse response =
task.getResult(ApiException.class);
} catch (ApiException ex) {
switch (ex.getStatusCode()) {
case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
try {
ResolvableApiException resolvableApiException =
(ResolvableApiException) ex;
resolvableApiException
.startResolutionForResult(MapsActivity.this,
LOCATION_SETTINGS_REQUEST);
} catch (IntentSender.SendIntentException e) {
}
break;
case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
break;
}
}
}
});
CASO 1:: la LocationSettingsStatusCodes.RESOLUTION_REQUIRED
posizione non è abilitata ma, possiamo chiedere all'utente di abilitare la posizione chiedendogli di attivare la posizione con la finestra di dialogo (chiamando startResolutionForResult
).
CASO 2 LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE
:: le impostazioni di posizione non sono soddisfatte. Tuttavia, non abbiamo modo di correggere le impostazioni, quindi non mostreremo la finestra di dialogo.
5) OnActivityResult
possiamo ottenere l'azione dell'utente nella finestra di dialogo delle impostazioni della posizione. RESULT_OK
=> L'utente ha attivato la posizione. RESULT_CANCELLED
- L'utente ha rifiutato la richiesta di impostazione della posizione.