You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET MAUI GeolocationRequest配置问题:无法获取位置且应用无响应

问题分析与解决方案

核心代码问题

你的代码直接调用GetLocationAsync后用.Result同步等待,这会触发死锁:UI线程被阻塞等待异步操作完成,而异步操作又依赖UI线程上下文,最终导致程序卡住,这就是调试无法越过该行、应用无响应的根本原因。

修复后的代码

将方法改为异步实现,用await替代.Result避免死锁:

private async Task GetAndDisplayLocationAsync()
{
    labelLatLong.Text = "Checking Lat Long. Please wait...";
    var request = new GeolocationRequest(GeolocationAccuracy.Medium, TimeSpan.FromSeconds(15));
    using var cts = new CancellationTokenSource();
    try
    {
        var location = await Geolocation.GetLocationAsync(request, cts.Token);
        if (location != null)
        {
            labelLatLong.Text = $"Latitude: {location.Latitude}, Longitude: {location.Longitude}, Altitude: {location.Altitude}";
        }
        else
        {
            labelLatLong.Text = "No location data received.";
        }
    }
    catch (Exception ex)
    {
        labelLatLong.Text = $"Unable to get location: {ex.Message}";
    }
}

调用时需使用await GetAndDisplayLocationAsync();,且调用该方法的上层方法也要标记为async。

需要检查的设置项

  • 模拟器定位配置
    • 打开模拟器右侧的Extended Controls(三个点图标),进入Location选项卡
    • 手动输入经纬度或选择预设位置,点击Send将定位数据推送至模拟器
    • 确认模拟器系统设置→位置中,“使用位置”已开启
  • Android权限配置
    • 检查AndroidManifest.xml是否声明了必要权限:
      <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
      <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
      <!-- Android 12+ 额外权限 -->
      <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
      
    • Android 13+ 需确保已声明ACCESS_FINE_LOCATION或ACCESS_COARSE_LOCATION,若使用后台定位还需ACCESS_BACKGROUND_LOCATION
  • 模拟器与VS连接状态
    • 确认模拟器已完全启动,Visual Studio设备管理器中显示其处于“Running”状态
    • 重启模拟器和Visual Studio,排除连接异常问题
  • 定位模式设置
    • 在模拟器位置设置中,将定位模式设为“高准确度”(结合GPS、Wi-Fi和移动网络),避免仅依赖GPS导致无法获取位置

内容的提问来源于stack exchange,提问作者Adam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 05:30:47