首页 > 解决方案 > 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" />

标签: androidxamarin.formslocationxamarin.essentials

解决方案


推荐阅读