private async Task LoadPoisAsync(bool isRefresh = false) { try { var status = await CrossPermissions.Current.CheckPermissionStatusAsync(Permission.Location); if (status != PermissionStatus.Granted) { //task.yield! var tmp = await CrossPermissions.Current.ShouldShowRequestPermissionRationaleAsync(Permission.Location); if (await CrossPermissions.Current.ShouldShowRequestPermissionRationaleAsync(Permission.Location)) { await PageDialogService.DisplayAlertAsync("Need location", "Gunna need that location", "OK"); } var results = await CrossPermissions.Current.RequestPermissionsAsync(Permission.Location); //Best practice to always check that the key exists if (results.ContainsKey(Permission.Location)) { status = results[Permission.Location]; } } if (status == PermissionStatus.Granted) { if (CrossGeolocator.IsSupported && CrossGeolocator.Current.IsGeolocationAvailable) { var locator = CrossGeolocator.Current; locator.DesiredAccuracy = 50; //var location = await locator.GetLastKnownLocationAsync(); //UWP: only this works on desktop and only after allowing location service in location privacy settings var position = await locator.GetPositionAsync(); //CrossLocalNotifications.Current.Show($"{position.Latitude}", $"{position.Longitude}", 101 /*DateTime.Now.AddSeconds(10)*/); bool connected = false; if (CrossConnectivity.IsSupported) { connected = CrossConnectivity.Current.IsConnected; } if (!connected) { await PageDialogService.DisplayAlertAsync("Networking", "Internet connection is down", "OK"); } if (isRefresh) { IsRefreshing = true; } else { IsBusy = true; } var poik = await EnvironmentApi.GetClosestPoisAsync(new SearchPoiDto { Latitude = position.Latitude, Longitude = position.Longitude }); Pois = new ObservableCollection <PoiDto>(poik); if (isRefresh) { IsRefreshing = false; } else { IsBusy = false; } } } else if (status != PermissionStatus.Unknown) { await PageDialogService.DisplayAlertAsync("Location Denied", "Can not continue, try again.", "OK"); } } catch (Exception ex) { IsBusy = IsRefreshing = false; } finally { IsBusy = IsRefreshing = false; } }