gpt4 book ai didi

android - Xam.Geolocation.Plugin 不适用于我的 Android 应用程序

转载 作者:太空狗 更新时间:2023-10-29 14:51:50 31 4
gpt4 key购买 nike

我正在尝试在 Xamarin 表单应用程序中访问我的设备的当前位置我正在使用 James Montemagno 创建的 Geolocation 插件。我在我的 pcl 和平台项目中添加了一个引用,但每次我的应用程序点击粗体代码行时,我都会得到一个 System.Threading.Tasks.TaskCanceledException: A task was canceled.我还在 android list 中添加了所有必要的设置。

 var locator = CrossGeolocator.Current;

locator.DesiredAccuracy = 100;

var position = await locator.GetPositionAsync(timeoutMilliseconds: 10000);

这里是 StackTrace

System.Threading.Tasks.TaskCanceledException: A task was canceled.
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x0002d] in /Users/builder/data/lanes/2512/d3008455/source/mono/external/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:193 at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x0002e] in /Users/builder/data/lanes/2512/d3008455/source/mono/external/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:170 at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x0000b] in /Users/builder/data/lanes/2512/d3008455/source/mono/external/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:142 at System.Runtime.CompilerServices.ConfiguredTaskAwaitable1+ConfiguredTaskAwaiter[TResult].GetResult
() [0x00000] in
/Users/builder/data/lanes/2512/d3008455/source/mono/external/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:580
at
Plugin.Geolocator.GeolocatorImplementation+<GetPositionAsync>d__27.MoveNext
() [0x00597] in
G:\GitHub\Xamarin.Plugins\Geolocator\Geolocator\Geolocator.Plugin.Android\GeolocatorImplementation.cs:195
at --- End of stack trace from previous location where exception was
thrown --- at
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw ()
[0x0000c] in
/Users/builder/data/lanes/2512/d3008455/source/mono/external/referencesource/mscorlib/system/runtime/exceptionservices/exceptionservicescommon.cs:143
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess
(System.Threading.Tasks.Task task) [0x00027] in
/Users/builder/data/lanes/2512/d3008455/source/mono/external/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:190
at
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification
(System.Threading.Tasks.Task task) [0x0002e] in
/Users/builder/data/lanes/2512/d3008455/source/mono/external/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:170
at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd
(System.Threading.Tasks.Task task) [0x0000b] in
/Users/builder/data/lanes/2512/d3008455/source/mono/external/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:142
at System.Runtime.CompilerServices.TaskAwaiter
1[TResult].GetResult () [0x00000] in /Users/builder/data/lanes/2512/d3008455/source/mono/external/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:372 at NetJetApp.Views.Home+d__52.MoveNext () [0x0003e] in c:\svn\Netjet\trunk\NetJetXamarin\NetJet\NetJetApp\NetJetApp\Views\Home.cs:552 at --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in /Users/builder/data/lanes/2512/d3008455/source/mono/external/referencesource/mscorlib/system/runtime/exceptionservices/exceptionservicescommon.cs:143 at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x00027] in /Users/builder/data/lanes/2512/d3008455/source/mono/external/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:190 at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x0002e] in /Users/builder/data/lanes/2512/d3008455/source/mono/external/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:170 at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x0000b] in /Users/builder/data/lanes/2512/d3008455/source/mono/external/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:142 at System.Runtime.CompilerServices.TaskAwaiter`1[TResult].GetResult () [0x00000] in /Users/builder/data/lanes/2512/d3008455/source/mono/external/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:372 at NetJetApp.Views.Home+d__49.MoveNext () [0x00111] in c:\svn\Netjet\trunk\NetJetXamarin\NetJet\NetJetApp\NetJetAp at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in /Users/builder/data/lanes/2512/d3008455p\Views\Home.cs:532 at --- End of stack trace from previous location where exception was thrown ---/source/mono/external/referencesource/mscorlib/system/runtime/exceptionservices/exceptionservicescommon.cs:143 at System.Runtime.CompilerServices.AsyncMethodBuilderCore.m__0 (System.Object state) [0x00000] in /Users/builder/data/lanes/2512/d3008455/source/mono/external/referencesource/mscorlib/system/runtime/compilerservices/AsyncMethodBuilder.cs:994 at Android.App.SyncContext+c__AnonStorey0.<>m__0 () [0x00000] in /Users/builder/data/lanes/2512/d3008455/source/monodroid/src/Mono.Android/src/Android.App/SyncContext.cs:18 at Java.Lang.Thread+RunnableImplementor.Run () [0x0000b] in /Users/builder/data/lanes/2512/d3008455/source/monodroid/src/Mono.Android/src/Java.Lang/Thread.cs:36 at Java.Lang.IRunnableInvoker.n_Run (IntPtr jnienv, IntPtr native__this) [0x00009] in /Users/builder/data/lanes/2512/d3008455/source/monodroid/src/Mono.Android/platforms/android-23/src/generated/Java.Lang.IRunnable.cs:71 at at (wrapper dynamic-method) System.Object:089044c0-4139-4792-8365-3f98e93136b3 (intptr,intptr)

最佳答案

在我的测试中,GetPositionAsync 超时到期与 TaskCanceledException 之间存在明确的相关性,因此较大的值可以降低该异常的可能性。我非常感谢你提出的问题,因为它让我更仔细地研究了我们框架中的这段代码。

当然,应用代码需要处理这样一个现实,即设备可能出于各种原因无法在合理的时间内提供位置。

为帮助解决崩溃问题,以下代码位于 Xamarin.Forms PCL 项目中,该项目用于 Xamarin.Android 和 Xamarin.iOS 项目,其应用程序位于应用程序商店中。

除了检查 IsGeolocationEnabled 和异常处理之外,这与您发布的内容没有本质区别,但是通过异常处理和调试语句,希望它可以防止应用程序崩溃并帮助您取得进一步进展。

public static async Task<Position> GetCurrentLocation()
{
// Capture the current location.
Position position = null;
try
{
var locator = CrossGeolocator.Current;
locator.DesiredAccuracy = 50;

// Get the current device position. Leave it null if geo-location is disabled,
// return position (0, 0) if unable to acquire.
if (locator.IsGeolocationEnabled)
{
// Allow ten seconds for geo-location determination.
position = await locator.GetPositionAsync(10000);
}
else
{
Debug.WriteLine("Location could not be acquired, geolocator is disabled.");
}
}
catch (Exception le)
{
// TODO: Log this error.
Debug.WriteLine("Location could not be acquired.");
Debug.WriteLine(le.Message);
Debug.WriteLine(le.StackTrace);
position = new Position() { Latitude = 0, Longitude = 0 };
}

return position;
}

关于android - Xam.Geolocation.Plugin 不适用于我的 Android 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34613899/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com