Xamarin.Forms:Xamarin Essentials GetLocation() 在 Android 11 上运行时始终返回 null

问题描述

我有一个 Xamarin Forms 应用程序,我正在尝试使用 Xamarin Essentials 获取手机的位置。应用面向 Android 版本 11 (API 30)。我已经在清单文件中提供了所有位置权限。它在 Android 11 以下运行良好,但在 Android 11 上有问题。

var location = await Geolocation.GetLocationAsync(new GeolocationRequest(GeolocationAccuracy.Medium)); 的每个请求都返回 null。

以下是请求权限和位置的代码

 private async Task locationPermission()
    {

        try
        {

            PermissionStatus whenInUsePermission = await Permissions.CheckStatusAsync<Permissions.LocationWhenInUse>();
            if (whenInUsePermission != PermissionStatus.Granted)
            {
                whenInUsePermission = await Permissions.RequestAsync<Permissions.LocationWhenInUse>();
            }

            PermissionStatus locationAlwaysPermission = await Permissions.CheckStatusAsync<Permissions.LocationAlways>();
            if (locationAlwaysPermission != PermissionStatus.Granted)
            {
                locationAlwaysPermission = await Permissions.RequestAsync<Permissions.LocationAlways>();
            }

            if (whenInUsePermission == PermissionStatus.Granted || locationAlwaysPermission == PermissionStatus.Granted)
            {
                // do something
                await GetDeviceLocation();
            }
        }
        catch (Exception ex)
        {

        }
    }

    public async Task GetDeviceLocation()
    {
        try
        {
            PermissionStatus status = await Permissions.CheckStatusAsync<Permissions.LocationWhenInUse>();
            if (status != PermissionStatus.Granted)
            {
                PermissionStatus results = await Permissions.RequestAsync<Permissions.LocationWhenInUse>();
            }

            if (status == PermissionStatus.Granted)
            {
                var location = await Geolocation.GetLocationAsync(new GeolocationRequest(GeolocationAccuracy.Medium));

            }

        }
        catch (Exception ex)
        {


        }
    }

我已在清单文件中授予以下权限:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-feature android:name="android.hardware.location" android:required="false" />
<uses-feature android:name="android.hardware.location.gps" android:required="false" />
<uses-feature android:name="android.hardware.location.network" android:required="false" />

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)