web-dev-qa-db-fra.com

Vérifiez si l'option 'Accéder à ma position' est activée - Android

J'ai une application Android qui utilise l'emplacement. Mais j'ai remarqué que si les utilisateurs désactivent l'option 'Accès à ma position' dans Paramètres> Accès à la position, rien ne fonctionne plus. Comment puis-je vérifier qu'il est activé? Dans le cas où il est désactivé, comment ouvrir ces paramètres depuis mon application?

Merci

RESOLU:

String locationProviders = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
if (locationProviders == null || locationProviders.equals("")) {
    ...
    startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));
}
18
Romain Pellerin

peut-être cela sera utile vérifier ce site il discute sur le service de localisation

http://www.scotthelme.co.uk/Android-location-services/

3
Prakhar

Vous pouvez le vérifier comme ça:

LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) // Return a boolean

MODIFIER:

Si vous souhaitez vérifier le fournisseur de réseau:

LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER) // Return a boolean

EDIT 2:

Si vous souhaitez ouvrir les paramètres, vous pouvez utiliser cette intention:

Intent intent = new Intent(Android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
8
Brtle

Une autre façon de le faire sans utiliser Settings.Secure et sans analyser tous les fournisseurs de lieux serait de procéder comme suit:

LocationManager locationManager = (LocationManager) getContext().getSystemService(Context.LOCATION_SERVICE);
int providersCount = locationManager.getProviders(true).size(); // Listing enabled providers only
if (providersCount == 0) {
    // No location providers at all, location is off
} 
2

Malheureusement, il semble que l'utilisation de Settings.Secure.LOCATION_PROVIDERS_ALLOWED soit obsolète depuis l'API 19.

Une nouvelle façon de faire serait:

int locationMode = Settings.Secure.getInt(
    getContentResolver(),
    Settings.Secure.LOCATION_MODE,
    Settings.Secure.LOCATION_MODE_OFF // Default value if not found
);

if (locationMode == Settings.Secure.LOCATION_MODE_OFF) {
    // Location is off
}
0