请求位置权限时出现问题xamarin c#

m3eecexj  于 2022-12-16  发布在  C#
关注(0)|答案(1)|浏览(124)

我有一个关于学校期末作业的问题,所以我在请求位置请求权限的时候遇到了问题,当这些权限都可以的时候,位置和前端都可以显示,不可以的时候,显示错误,问题是这个函数是异步的,所以它不等待位置允许的响应,所以,它会立即显示错误信息。有人知道如何解决这个问题吗?真诚的。

namespace Eindproject.Views
{
    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class Stations : ContentPage
    {
        public Stations()
        {
            InitializeComponent();

            // Check for location permission before getting location
            if (CheckLocationPermission())
            {
                // Load frontend
                frontend();
            }
            else
            {
                // Ask for permission
                RequestLocationPermission();

                // check again
                if (CheckLocationPermission())
                {
                    // Load frontend
                    frontend();
                }
                else
                {
                    // Show error
                    DisplayAlert("Error", "Location permission is required", "OK");
                }
                
            }

        }

        private async void RequestLocationPermission()
        {
            // Ask for permission
            await Permissions.RequestAsync<Permissions.LocationWhenInUse>();

        }

        private bool CheckLocationPermission()
        {
            // Check if permission is granted
            if (PermissionStatus.Granted == Permissions.CheckStatusAsync<Permissions.LocationWhenInUse>().Result)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        private async void frontend()
        {
            // Get location
            Location location = await DataRepository.GetLocationAsync();
            // Get stations
            List<IcaoStation> stations = await DataRepository.GetNearbyStationsAsync(location.Latitude, location.Longitude);
            // Set source
            lvwCollectibleItems.ItemsSource = stations;
        }
    }
}
lp0sw83n

lp0sw83n1#

将实际代码从构造函数移到LoadedNavigatedToAppearing等事件的相应事件处理程序。将这些事件处理程序声明为async,然后可以在async方法RequestLocationPermission上使用await,以延迟以下代码,直到结果可用。
您还应该将CheckLocationPermission声明为async,并在CheckStatusAsync上使用await,而不是访问任务的Result属性。

相关问题