Flutter-geolocator: Android - CheckGeolocationPermissionStatus exécuté pour la première fois est refusé

Créé le 9 juil. 2020  ·  3Commentaires  ·  Source: Baseflow/flutter-geolocator

Dans la plate-forme Android lorsque j'exécute le Geolocator (). La fonction CheckGeolocationPermissionStatus () pour la première fois GeolocationStatus est refusée et ne demande pas la permission à l'utilisateur. Mais dans IOS lorsque j'appelle la même fonction pour la première fois, le GeolocationStatus est inconnu donc je sais que je dois appeler Geolocator(). GetCurrentPosition () pour demander l'autorisation à l'utilisateur et renvoyer l'emplacement si l'autorisation a été accordée.

Existe-t-il un moyen de demander l'autorisation à l'utilisateur dans Android lorsque j'appelle checkGeolocationPermissionStatus pour la première fois ?

sous mon code :

Future<void> getLocation() async {
    try {

      var serviceEnabled = await  Geolocator().isLocationServiceEnabled();

      if (serviceEnabled) {
        var geolocationStatus =
            await Geolocator().checkGeolocationPermissionStatus();

        if (geolocationStatus == GeolocationStatus.granted || geolocationStatus == GeolocationStatus.unknown) {
          position = await Geolocator().getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
          return;
        } 
      }
    } catch (e) {
      print(e);
    }
  }

Tous les 3 commentaires

Il semble que ce gestionnaire de plugins ne soit pas plus intéressé à maintenir ou à soutenir sa communauté, j'ai vu de nombreux problèmes mais aucune solution précise ou de correction de bogue.

Oui vous avez raison! J'ai également vu d'autres problèmes sans réponses. =/

@azeemgujjar , @CNogueira92 , ce n'est pas le cas. En fait, je travaille dur sur une prochaine version majeure, mais comme la plupart des projets OSS, je dois le faire pendant mon temps libre, ce qui est pour le moment un peu limité, donc mon attention est un peu divisée. Bien sûr, j'accepte les contributions au plugin pour aider.

Pour répondre à votre question @CNogueira92 , Android et iOS gèrent les autorisations un peu différemment. Par défaut, Android traite les autorisations comme "refusées" (même lorsque l'utilisateur ne les a pas explicitement refusées). iOS a un statut spécifique pour la situation où les autorisations n'ont pas encore été demandées (appelé "Non déterminé", que nous traduisons par "inconnu").

Sur les deux plates-formes, il est possible de demander des autorisations lorsque le checkGeolocationPermissionStatus renvoie denied ou unknown . Si l'utilisateur a sélectionné l'option « Refusé et ne plus demander », le géolocalisateur le remarquera et ne demandera pas d'autorisations.

En fait, vous n'avez même pas besoin de vérifier manuellement les autorisations car le géolocalisateur le fera en interne. Ainsi, vous pouvez mettre à jour votre code en toute sécurité pour :

Future<void> getLocation() async {
    try {

      var serviceEnabled = await  Geolocator().isLocationServiceEnabled();

      if (serviceEnabled) {
        position = await Geolocator().getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
      } else {
        // TODO: ask the user to enable the location services...   
      }
    } catch (e) {
      print(e);
    }
  }

Le checkGeolocationPermissionStatus n'est qu'une méthode pratique au cas où vous voudriez vérifier les autorisations manuellement et signaler à l'utilisateur de prendre des mesures. Dans la nouvelle version que j'ai mentionnée, vous pourrez également demander manuellement des autorisations. Si vous souhaitez le faire maintenant, vous devrez appeler le plugin location_permissions qui est livré avec le géolocalisateur. Plus d'informations sur le plugin location_permissions peuvent être trouvées ici .

Cette page vous a été utile?
0 / 5 - 0 notes