コード例 #1
0
        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;
            }
        }