Flutter-geolocator: Android - CheckGeolocationPermissionStatus zum ersten Mal ausgeführt wird verweigert

Erstellt am 9. Juli 2020  ·  3Kommentare  ·  Quelle: Baseflow/flutter-geolocator

Auf der Android-Plattform, wenn ich den Geolocator () ausführe. CheckGeolocationPermissionStatus()-Funktion zum ersten Mal, wenn GeolocationStatus verweigert wird und den Benutzer nicht um Erlaubnis bittet. Aber in IOS, wenn ich die gleiche Funktion zum ersten Mal aufrufe, ist der GeolocationStatus unbekannt, daher weiß ich, dass ich Geolocator () aufrufen muss. GetCurrentPosition(), um den Benutzer um Erlaubnis zu bitten und den Standort zurückzugeben, wenn die Erlaubnis erteilt wurde.

Gibt es eine Möglichkeit, den Benutzer in Android um Erlaubnis zu bitten, wenn ich checkGeolocationPermissionStatus zum ersten Mal aufrufe?

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

Alle 3 Kommentare

Scheint, dass dieser Plugin-Manager nicht mehr daran interessiert ist, seine Community zu pflegen oder zu unterstützen, ich habe viele Probleme gesehen, aber keine genaue oder Fehlerbehebungslösung dafür.

ja, du hast recht! Ich sah auch auf andere Probleme keine Antworten. =/

@azeemgujjar , @CNogueira92 , das ist nicht der Fall. Ich arbeite derzeit hart an einem nächsten großen Release, aber wie die meisten OSS-Projekte muss ich dies in meiner Freizeit tun, die im Moment etwas begrenzt ist, so dass meine Aufmerksamkeit etwas gespalten ist. Natürlich freue ich mich über Beiträge zum Plugin, um zu helfen.

Um Ihre Frage @CNogueira92 zu beantworten, gehen Android und iOS mit Berechtigungen etwas anders um. Standardmäßig behandelt Android Berechtigungen als "verweigert" (auch wenn der Benutzer sie nicht ausdrücklich verweigert hat). iOS hat einen bestimmten Status für Situationen, in denen noch keine Berechtigungen angefordert wurden (genannt "Nicht bestimmt", was wir in "unbekannt" übersetzen).

Auf beiden Plattformen ist es in Ordnung, Berechtigungen anzufordern, wenn checkGeolocationPermissionStatus denied oder unknown zurückgibt. Wenn der Benutzer die Option "Abgelehnt und nicht mehr fragen" ausgewählt hat, wird der Geolocator dies bemerken und keine Berechtigungen anfordern.

Tatsächlich müssen Sie nicht einmal manuell nach Berechtigungen suchen, da der Geolocator dies intern erledigt. So können Sie Ihren Code sicher aktualisieren auf:

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

Das checkGeolocationPermissionStatus ist nur eine praktische Methode, falls Sie die Berechtigungen manuell überprüfen und dem Benutzer signalisieren möchten, etwas zu unternehmen. In der neuen Version, die ich erwähnt habe, können Sie auch manuell Berechtigungen anfordern. Wenn Sie dies jetzt tun möchten, müssen Sie das location_permissions Plugin aufrufen, das mit dem Geolocator geliefert wird. Weitere Informationen zum Plugin location_permissions finden Sie hier .

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen