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