web-dev-qa-db-fra.com

Location Manager supprimer l'autorisation de mise à jour

J'utilise Android studio et compileSdkVersion est 23 en ce que j'utilise ci-dessous le code

 if(locationManager != null){
            locationManager.removeUpdates(GPSListener.this);
        }

pour arrêter la mise à jour gps où GPS Listener est une classe qui implémente LocationListener.

mais dans la ligne removeUpdates, je suis en dessous de l'avertissement de peluches

L'appel nécessite une autorisation qui peut être rejetée par l'utilisateur: le code doit explicitement vérifier si l'autorisation est disponible (avec checkPermission) ou gérer un potentiel SecurityException

Je n'obtiens pas quel est le problème dans le code ci-dessus. Toute autorisation supplémentaire doit être ajoutée dans le fichier manifeste?.

Cordialement.

8
Madhukar Hebbar

Depuis le SDK 23, vous devez/devez vérifier l'autorisation avant d'appeler la fonctionnalité de l'API de localisation. Voici un exemple de la façon de procéder:

if (locationManager != null) {
    if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
            || checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
        locationManager.removeUpdates(GPSListener.this);
    }
}

Il y a checkSelfPermission(), qui consiste à vérifier si "vous" (cette application) dispose des autorisations appropriées. Il existe également checkPermission(), qui consiste à vérifier si un autre processus dispose des autorisations appropriées.

Notes

  • à côté de cette vérification de l'exécution, il est également nécessaire d'exiger les autorisations appropriées dans le AndroidManifest.
  • si votre targetSdk est <23, vous devriez utiliser ContextCompat.checkSelfPermission() à la place (merci à JerryBrady)
26
Tim Castelijns

Je n'ai pas pu utiliser checkSelfPermission(), car mon API min est 14 et 23 est requis. Sachant cela, vous pouvez également try à catch a SecurityException.

Exemple:

try {
    locationManager.removeUpdates(GPSListener.this);
} catch (SecurityException e) {
    Log.e("PERMISSION_EXCEPTION","PERMISSION_NOT_GRANTED");
}
14
Rodrigo Borba

Pour ajouter au commentaire de Jerry Brady concernant ContextCompat, voici le code complet pour <23:

 if (ContextCompat.checkSelfPermission(this, Android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
                || ContextCompat.checkSelfPermission(this, Android.Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED)
5
Wouter de Jong