【问题标题】:GetPositionAsync works in android but not in IOS 11GetPositionAsync 适用于 android 但不适用于 IOS 11
【发布时间】:2017-11-07 17:14:05
【问题描述】:
System.Threading.Tasks.TaskCanceledException: A task was canceled.

2017-11-05 14:46:31.228 Project.iOS[36807:4480015] 
Unhandled Exception:
System.Threading.Tasks.TaskCanceledException: A task was canceled.
  at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x00020] in /Library/Frameworks/Xamarin.iOS.framework/Versions/11.2.0.11/src/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:179 
  at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x00028] in /Library/Frameworks/Xamarin.iOS.framework/Versions/11.2.0.11/src/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:156 
  at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x00008] in /Library/Frameworks/Xamarin.iOS.framework/Versions/11.2.0.11/src/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:128 
  at System.Runtime.CompilerServices.TaskAwaiter`

当我尝试在 ios.11 模拟器上调试时,我很难处理以下代码引发的异常,但此代码在 android 中运行良好。

private async Task<Plugin.Geolocator.Abstractions.Position> GetPositionAsync() {
            var locator = CrossGeolocator.Current;
            locator.DesiredAccuracy = 50;
            TimeSpan ts = new TimeSpan((Int32)10000);
            _position = await locator.GetPositionAsync(timeout: ts);
            return _position;
        } 

我已遵循与@jamesmontemagno/Xamarin.Plugins/Geolocator/ 相关的各个网站中提到的所有说明,但没有运气。我已确保我的 info.plist 包含以下代码:

  <key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
  <string>This app needs access location when open and in the background.</string>
  <key>NSLocationAlwaysUsageDescription</key>
  <string>Need location for geolocator plugin.</string>
  <key>RequestWhenInUseAuthorization</key>
  <string>Need location for geolocator plugin.</string>
  <key>NSLocationWhenInUseUsageDescription</key>
  <string>Need location for geolocator plugin.</string> 

我想要实现的只是通过 Xamarin.Froms 在所有三个平台(IOS、Android、Windows)上获取当前位置。 Android 运行良好,但 IOS 是我卡住的地方。感谢您提供任何类型的帮助。

【问题讨论】:

  • 真机测试是否存在这个问题?
  • 是的。@ColeXia

标签: ios xamarin.forms


【解决方案1】:

与官方样例对比后发现问题是你设置的timeout参数太短,无法完成任务,所以每次都取消。

解决办法:

await locator.GetPositionAsync(TimeSpan.FromSeconds(10));

【讨论】:

  • 感谢您的回复。我会尝试您的解决方案并随时通知您,但是为什么超时参数对于 IOS 来说太短了,为什么不适合 windows 和 android 任何想法?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-07
  • 2020-02-05
  • 2017-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多