android - 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" />
解决方案
推荐阅读
- spring-boot - @EnableBatchProcessing 和 @DataJpaTest 在带有休眠的 Spring Boot 应用程序中
- powershell - 所有子文件夹中每个文件中的 Powershell 更新字符串
- html - java.lang.NumberFormatException: null with jsp 和 tomcat
- reactjs - 如何从反应中的测试覆盖率报告中找到未发现的功能
- ansible - Ansible 主机配置,一个哈希用于多个参数
- reactjs - 在 create-react-app 时未创建 Src 文件夹
- prometheus - Prometheus Helm Chart:如何配置黑盒导出器?
- c++ - C++如何返回动态分配的数组
- javascript - 如何在一个 React 组件中划分业务逻辑?
- r - 使用两个具有相同日期的面板数据集进行操作