8
votes

Emplacement Manager Supprimer les mises à jour Permission

J'utilise Android Studio et CompilesDkversion est 23. En ce que j'utilise ci-dessous Code xxx

pour arrêter la mise à jour GPS où l'écoute GPS est une classe qui implémente la localisationListener.

mais dans la ligne RemoveUpdates, je reçois ci-dessous l'avertissement de peluche < / p>

appel nécessite une autorisation qui peut être rejetée par l'utilisateur: le code devrait vérifier explicitement pour voir si la permission est disponible (avec Checkpermission ) ou gérer un potentiel SecurityException

Je ne reçois pas quelle est la question dans le code ci-dessus. Toute autorisation supplémentaire doit être ajoutée dans le fichier manifeste?.

Cordialement.


4 Réponses :


26
votes

Depuis SDK 23, vous devez vérifier l'autorisation avant d'appeler la fonctionnalité de l'API d'emplacement. Voici un exemple de comment le faire:

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);
    }
}


2 commentaires

Notez que si votre cible est <23, vous devez utiliser contextCompat.CheckEfpermission () à la place.


Je veux pleurer. Pourquoi l'application aurait-elle besoin d'une autorisation pour supprimer une localisation déjà attachée du gestionnaire de localisation?



14
votes

Je n'ai pas pu utiliser VeckEfermission () code>, car mon API MIN a 14 ans et 23 est requis. Sachant que, vous pouvez également essayer code> à attraper code> A SecurityException code>.

Exemple: P>

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


4 commentaires

La question est destinée à la version 23 du SDK cible. Il n'y a aucune relation avec min API.


La question était destinée à "CompilesDkversion 23" qui ne signifie pas que l'application est ciblée 23. Si vous souhaitez une compatibilité en arrière avec une prise en charge complète Android M, utilisez contextCompat.checkEfpermission () à la place et cela fonctionnera.


Je suis désolé. Je n'ai pas réalisé ça. Mais je pense que cette option utilise-t-elle toujours utile.


Cette réponse m'a aidé. Mais je pense que ce n'était pas une solution appropriée. Mais je l'ai levé.



5
votes

Pour ajouter au commentaire de Jerry Brady concernant contextCompatat, c'est le code complet de <23:

 XXX                                  

0 commentaires

-1
votes

Voici ma solution! xxx


0 commentaires