c# - Xamarin Plugin.Geolocator 不工作

标签 c# xamarin xamarin.ios xamarin.android nuget

我尝试使用共享代码库中的以下代码获取用户的当前位置。

项目源可在此处获得 Dropbox link

using System;
using System.Diagnostics;
using Plugin.Geolocator;
using Plugin.Geolocator.Abstractions;

namespace SampleApp
{
    public class LocationManager
    {
        private DateTimeOffset timestamp;

        private double latitude;

        private double longitude;

        IGeolocator locator;

        public LocationManager()
        {
            asyncInitLocation();
        }

        private async void asyncInitLocation()
        {
            try
            {
                locator = CrossGeolocator.Current;
                locator.DesiredAccuracy = 50;

                if (locator.IsGeolocationEnabled)
                {
                    var position = await locator.GetPositionAsync(timeoutMilliseconds: 20000);
                    timestamp = position.Timestamp;
                    latitude = position.Latitude;
                    longitude = position.Longitude;
                }
                else 
                {
                    Debug.WriteLine("Geolocation is disabled!");
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine("Unable to get location, may need to increase timeout: " + ex);
            }
        }

        public DateTimeOffset getTimestamp()
        {
            return this.timestamp;
        }

        public double getLatitude()
        {
            return this.latitude;
        }

        public double getLongitude()
        {
            return this.longitude;
        }

        public void refresh()
        {
            asyncInitLocation();
        }
    }
}

我收到以下错误。 Google 没有帮助我!

Unable to get location, may need to increase timeout: System.NotImplementedException: This functionality is not implemented in the portable version of this assembly.  You should reference the NuGet package from your main application project in order to reference the platform-specific implementation.
  at Plugin.Geolocator.CrossGeolocator.get_Current () <0x52c7bb60 + 0x0003f> in <filename unknown>:0 
  at SampleApp.LocationManager+<asyncInitLocation>c__async0.MoveNext () <0x52c7ae60 + 0x000bf> in <filename unknown>:0 

更新: packages.config 文件如下所示

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Microsoft.Bcl" version="1.1.10" targetFramework="portable-net45+win+wp80+MonoTouch10+MonoAndroid10+xamarinmac20+xamarintvos10+xamarinwatchos10+xamarinios10" />
  <package id="Microsoft.Bcl.Build" version="1.0.21" targetFramework="portable-net45+win+wp80+MonoTouch10+MonoAndroid10+xamarinmac20+xamarintvos10+xamarinwatchos10+xamarinios10" />
  <package id="Microsoft.Net.Http" version="2.2.29" targetFramework="portable-net45+win+wp80+MonoTouch10+MonoAndroid10+xamarinmac20+xamarintvos10+xamarinwatchos10+xamarinios10" />
  <package id="modernhttpclient" version="2.4.2" targetFramework="portable-net45+win+wp80+MonoTouch10+MonoAndroid10+xamarinmac20+xamarintvos10+xamarinwatchos10+xamarinios10" />
  <package id="Newtonsoft.Json" version="8.0.3" targetFramework="portable-net45+win+wp80+MonoTouch10+MonoAndroid10+xamarinmac20+xamarintvos10+xamarinwatchos10+xamarinios10" />
  <package id="Xam.Plugin.Geolocator" version="3.0.4" targetFramework="portable-net45+win+wp80+MonoTouch10+MonoAndroid10+xamarinmac20+xamarintvos10+xamarinwatchos10+xamarinios10" />
</packages>

现在我收到以下错误消息:

Unable to get location, may need to increase timeout: 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/3415/7db2aac3/source/mono/external/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:179 
  at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x0002e] in /Users/builder/data/lanes/3415/7db2aac3/source/mono/external/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:156 
  at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x0000b] in /Users/builder/data/lanes/3415/7db2aac3/source/mono/external/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:128 
  at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1+ConfiguredTaskAwaiter[TResult].GetResult () [0x00000] in /Users/builder/data/lanes/3415/7db2aac3/source/mono/external/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:535 
  at Plugin.Geolocator.GeolocatorImplementation+<GetPositionAsync>d__27.MoveNext () [0x00597] in C:\projects\xamarin-plugins\Geolocator\Geolocator\Geolocator.Plugin.Android\GeolocatorImplementation.cs:175 
--- End of stack trace from previous location where exception was thrown ---
  at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in /Users/builder/data/lanes/3415/7db2aac3/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/3415/7db2aac3/source/mono/external/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:176 
  at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x0002e] in /Users/builder/data/lanes/3415/7db2aac3/source/mono/external/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:156 
  at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x0000b] in /Users/builder/data/lanes/3415/7db2aac3/source/mono/external/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:128 
  at System.Runtime.CompilerServices.TaskAwaiter`1[TResult].GetResult () [0x00000] in /Users/builder/data/lanes/3415/7db2aac3/source/mono/external/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:357 
  at BugsAndDrugs.LocationManager+<asyncInitLocation>c__async0.MoveNext () [0x000d4] in /Users/myname/Perforce/depot/test_sandbox/Playground/SampleApp/SampleApp/Manager/LocationManager.cs:32 

我错过了什么吗?我已经使用 nuget 将插件添加到项目中。

最佳答案

我有同样的错误,我用 clean-solution 解决了,然后重建解决方案,并确保将依赖项添加到所有项目

关于c# - Xamarin Plugin.Geolocator 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38080320/

相关文章:

ios - iOS(Xamarin)中带有图像和文本的UILabel

ios - 错误 MT1006 容器创建失败

xamarin - 尽管您已登录,但您必须登录才能下载此组件

ssl - 在 httpClient 中使用 POST 时如何确保数据被加密

c# - 如何限制泛型参数具有特定的静态函数?

c# - 我的功能是否违反了 SRP 或其他最佳实践?

c# - 在 Xamarin Android 应用程序中下载并打开 pdf?

ios - 如何使用 DeviceCheck.DCDevice Xamarin Forms C# 生成 token 代码 iOS DeviceId

c# - 从 Windows 服务访问新的 RabbitMQ 消息

c# - Nest Client在Elasticsearch中进行相等查询