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 potentielSecurityException
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.
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
ContextCompat.checkSelfPermission()
à la place (merci à JerryBrady)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");
}
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)