2016-08-13 99 views
1

我试图执行下面的代码Xamarin形式获取位置

var locator = CrossGeolocator.Current; 

locator.DesiredAccuracy = 100; //100 is new default 

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

在Xamarin形式使用Xam.plugin.Geolocator但得到“这个功能是不是在这个大会的便携式版本中实现。您应该引用来自主应用程序项目的NuGet包,以便参考平台特定的实现。“异常。

我使用3.0.4版本Xam.plugin.Geolocator从这个链接https://www.nuget.org/packages/Xam.Plugin.Geolocator

我已经从饮用水,项目和机器人项目添加NuGet包。加入

[组件:UsesPermission(Android.Manifest.Permission.AccessFineLocation)] [组件:UsesPermission(Android.Manifest.Permission.AccessCoarseLocation)]

在AssemblyInfo.cs中。还确保在Visual Studio 2015中的Android清单中检查“Access_Coarse_Location”和“Access_Fine_Locations”。

任何人都可以帮助我失踪?

+0

它看起来像你没有添加geolocator NuGet插件给你r android项目? –

回答

0

您可以使用依赖注入来访问原生Android代码并获取当前位置。

创建一个类,将等待结果

class GeolocationWaiter : Java.Lang.Object,ILocationListener 
{ 
    private bool done = false; 
    private double latitude = 0; 
    private double longitude = 0; 


    public Task<GeoLocation> getLocation() 
    { 
     return Task<GeoLocation>.Run(() => 
     { 
      while (!done) { } 
      GeoLocation location; 
      location.latitude = latitude; 
      location.longitude = longitude; 
      return location; 
     }); 
    } 

    public void OnLocationChanged(Location location) 
    { 
     Toast.MakeText(Forms.Context, "Update", ToastLength.Long).Show(); 
     latitude = location.Latitude; 
     longitude = location.Longitude; 
     done = true; 
    } 

    public void OnProviderDisabled(string provider){} 
    public void OnProviderEnabled(string provider){} 
    public void OnStatusChanged(string provider, [GeneratedEnum] Availability status, Bundle extras){} 
    public void Dispose() { } 
} 

调用它异步

public async Task<GeoLocation?> GetGps() 
{ 
    Toast.MakeText(Forms.Context, "Walk around to get current location", 
    ToastLength.Long).Show(); 
    var waiter = new GeolocationWaiter(); 
    locMgr.RequestLocationUpdates(Provider, 2000, 1, waiter); 
    ret = await waiter.getLocation(); 
    locMgr.RemoveUpdates(waiter); 
    return ret; 
} 

你可以在谷歌例如播放:​​3210

的源代码:https://github.com/tripolskypetr/NearestMetro