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

Vivo Android11设备调用GetPositionAsync抛出TaskCancelException求助

问题根因

该异常是Android 11系统+Vivo定制系统的位置策略限制导致的:

  • Android 11对第三方应用调用Google Play服务的融合定位(FusedLocationProvider)做了权限收紧,Vivo V2050搭载的Funtouch OS在此基础上额外增加了无网状态下的定位拦截规则,非Google系应用默认无法在无网时主动触发Google定位服务更新
  • 你观测到的「联网打开Google地图后APP可正常定位」,本质是Google地图联网时触发了Google Play服务的位置缓存更新,第三方应用才能读取到已缓存的位置信息
  • CrossGeolocator底层默认优先调用Google融合定位接口,当定位请求超过设置的10s超时还未拿到结果时,就会抛出TaskCanceledException异常

修复方案

1. 修正现有代码的错误并调整调用参数

你当前的代码存在两个可优化点:一是timeoutMillseconds拼写错误(正确拼写为timeoutMilliseconds),二是long是C#关键字不可用作变量名,同时可增加定位前置检查、允许返回最后已知位置来提升成功率,修改后的代码参考如下:

try
{
    var locator = CrossGeolocator.Current;
    // 前置检查定位服务是否可用、已开启
    if (!await locator.IsGeolocationAvailable() || !await locator.IsGeolocationEnabled())
    {
        // 此处补充引导用户开启定位服务的交互逻辑
        return;
    }
    // 调整定位参数:延长超时到15s适配定制系统、允许返回最近缓存的位置、调整精度要求
    var position = await locator.GetPositionAsync(
        timeout: TimeSpan.FromSeconds(15), 
        includeLastKnownLocation: true, 
        accuracy: GeolocationAccuracy.Medium);
    var longitude = position.Longitude;
}
catch (TaskCanceledException ex)
{
    // 捕获超时异常时触发降级定位逻辑
}

2. 补充Android 11权限配置

在Android项目的AndroidManifest.xml中添加对应位置权限声明:

<!-- 基础定位权限 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- Android 11及以上后台定位权限,如有后台定位需求可添加 -->
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />

同时在申请权限时引导Vivo用户给应用授予「始终允许位置访问」权限,避免仅授予使用时权限导致后台定位请求被拦截。

3. 增加Vivo设备特殊适配

Vivo系统默认会对非白名单应用做电池优化限制,可在首次启动时引导用户关闭对当前应用的电池优化,同时允许Google Play服务后台运行,避免定位请求被系统主动杀死触发超时。

4. 补充降级定位策略

如果Google融合定位持续调用失败,可以切换调用Android原生LocationManager接口直接获取GPS/基站定位信息,绕过Google Play服务的依赖,适配无Google服务或者Google服务被限制的设备。

内容的提问来源于stack exchange,提问作者Hannah.C

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 03:57:02