Xamarin Geolocation 只是挂了一些电话

Xamarin Geolocation just hangs one some phones

我有一个 class,其中有一个计时器,我每隔 15 秒尝试获取 GeoLocation。

private System.Timers.Timer _getLocationTimer { get; set; }
_getLocationTimer = new System.Timers.Timer { Interval = 15000 };

_getLocationTimer.Elapsed -= GetLocation_Handler;
_getLocationTimer.Elapsed += GetLocation_Handler;
_getLocationTimer.Start();

async void GetLocation_Handler(object sender, ElapsedEventArgs e)
    {
        Position position = null;
        try
        {
             var locator = CrossGeolocator.Current;
            locator.DesiredAccuracy = 100;

            position = await locator.GetLastKnownLocationAsync();

            if (position != null)
            {
                _position = new Position(position.Latitude, position.Longitude);
                //got a cahched position, so let's use it.
                return;
            }

            if (!locator.IsGeolocationAvailable || !locator.IsGeolocationEnabled)
            {
                //not available or enabled
                return;
            }

            position = await locator.GetPositionAsync(TimeSpan.FromSeconds(10));
        }
        catch (Exception ex)
        {
            throw ex;
            return;
        }
        _position = new Position(position.Latitude, position.Longitude);
        if (position == null)
            return;
    }

我的问题出在方法 GetPositionAsync 上,因为有时并且只有一部手机没有 return(只是挂在方法中)。我正在使用 nuget 的 Xam.Plugin.Geolocator 库。有人可以告诉我我该怎么做才能让 GetPositionAsync 每次都能正常工作吗?

目前,Xamarin.Essentials 使请求权限变得更容易。将 Xamarin.Essentials 更新到最新版本。只需要在android的manifest文件和iOS的Info.plist文件中添加权限即可。

有关地理位置权限的更多详细信息,请查看下面的 link。 https://docs.microsoft.com/en-us/xamarin/essentials/geolocation?tabs=android

Xamarin.Essentials:权限:https://docs.microsoft.com/en-us/xamarin/essentials/permissions?context=xamarin%2Fxamarin-forms&tabs=android