Selon la documentation Android:
L'API des services de localisation Google, qui fait partie des services Google Play, fournit un cadre de haut niveau plus puissant que automatiquement gère les fournisseurs de localisation, le mouvement des utilisateurs et la précision de localisation par rapport à l'API d'emplacement de la plateforme dans
Android.location
.
Mais en utilisant le fournisseur de localisation fusionné (à partir des API de localisation dans les services Google Play), je ne sais pas comment vérifier si l'utilisateur a activé ou désactivé l'emplacement.
En utilisant le oldAndroid.location
c'était simple:
locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
Mais je ne souhaite pas utiliser à la fois le fournisseur de localisation fusionné des services Google Play et le ancien emplacement Android.
Comment puis-je vérifier si l'emplacement est activé par l'utilisateur à l'aide du fournisseur d'emplacement fusionné?
Merci d'avance.
Voir SettingsApi : vérifiez votre demande de localisation puis assurez-vous que les paramètres système de l'appareil sont correctement configurés pour les besoins de localisation de l'application.
Ce tutoriel de formation pour développeur Android pourrait vous aider - voici les bases:
Code à exécuter dans votre activité onCreate ():
// Create an instance of GoogleAPIClient.
if (mGoogleApiClient == null) {
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
}
mGoogleApiClient.connect();
LocationRequest mLocationRequest = new LocationRequest();
mLocationRequest.setInterval(10000);
mLocationRequest.setFastestInterval(5000);
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
.addLocationRequest(mLocationRequest);
PendingResult<LocationSettingsResult> result =
LocationServices.SettingsApi.checkLocationSettings(mGoogleApiClient, builder.build());
result.setResultCallback(new ResultCallback<LocationSettingsResult>() {
@Override
public void onResult(LocationSettingsResult locationSettingsResult) {
final Status status = locationSettingsResult.getStatus();
final LocationSettingsStates LS_state = locationSettingsResult.getLocationSettingsStates();
switch (status.getStatusCode()) {
case LocationSettingsStatusCodes.SUCCESS:
// All location settings are satisfied. The client can initialize location
// requests here.
break;
case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
// Location settings are not satisfied. But could be fixed by showing the user
// a dialog.
try {
// Show the dialog by calling startResolutionForResult(),
// and check the result in onActivityResult().
status.startResolutionForResult(LocationByGPS.this, REQUEST_CHECK_SETTINGS);
} catch (IntentSender.SendIntentException e) {
// Ignore the error.
}
break;
case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
// Location settings are not satisfied. However, we have no way to fix the
// settings so we won't show the dialog.
break;
}
}
});
Remplace cette méthode:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
final LocationSettingsStates states = LocationSettingsStates.fromIntent(data);
switch (requestCode) {
case REQUEST_CHECK_SETTINGS:
switch (resultCode) {
case Activity.RESULT_OK:
// All required changes were successfully made
GetUserLocation();//FINALLY YOUR OWN METHOD TO GET YOUR USER LOCATION HERE
break;
case Activity.RESULT_CANCELED:
// The user was asked to change settings, but chose not to
break;
default:
break;
}
break;
}
}
N'oubliez pas de les implémenter dans votre classe:
public class MyClass extends AppCompatActivity implements
ActivityCompat.OnRequestPermissionsResultCallback,
GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener{
protected static final int REQUEST_CHECK_SETTINGS = 0x1;
/*
your code i.e. with the above code etc....
*/
}
Bonne explication ici dans ce lien développeur Google.
À votre santé!
Comme maintenant en 2019
Dernier, meilleur et le plus court est
public booleanisLocationEnabled()
{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
// This is new method provided in API 28
LocationManager lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
return lm.isLocationEnabled();
} else {
// This is Deprecated in API 28
int mode = Settings.Secure.getInt(context.getContentResolver(), Settings.Secure.LOCATION_MODE,
Settings.Secure.LOCATION_MODE_OFF);
return (mode != Settings.Secure.LOCATION_MODE_OFF);
}
}
Vous pouvez aussi vérifier comme ceci:
LocationManager service = (LocationManager) getSystemService(LOCATION_SERVICE);
boolean isEnabled = service.isProviderEnabled(LocationManager.GPS_PROVIDER);