2016-08-13 1 views
1
내가

자 마린 양식을 얻기 위치

var locator = CrossGeolocator.Current; 

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

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

자 마린 양식에 Xam.plugin.Geolocator를 사용하지만 을 받고 "이 기능이 어셈블리의 휴대용 버전에서 구현되지 않습니다. 당신은 참조해야합니다 이하의 코드 실행하려고

기본 응용 프로그램 프로젝트의 NuGet 패키지를 사용하여 플랫폼 별 구현을 참조하십시오. " 예외.

나는 음료수 porject와 드로이드 프로젝트에 모두 nuget 패키지를 추가 한 링크 https://www.nuget.org/packages/Xam.Plugin.Geolocator

에서 Xam.plugin.Geolocator의 3.0.4 버전을 사용하고 있습니다. 추가

[조립체 UsesPermission (Android.Manifest.Permission.AccessFineLocation)] [조립체 UsesPermission (Android.Manifest.Permission.AccessCoarseLocation)]에서의 AssemblyInfo.cs

. 또한 Visual Studio 2015의 Android Manifest에서 "Access_Coarse_Location"및 "Access_Fine_Locations"가 선택되었는지 확인하십시오.

내가 누락 된 항목을 도울 수있는 사람이 있습니까?

+0

을 Geolocator NuGet 플러그인을 추가하지 않은 것 같습니다. R 안드로이드 프로젝트? –

답변

0

의존성 삽입을 사용하여 기본 Android 코드에 액세스하고 현재 위치를 얻을 수 있습니다.

는 비동기

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; 
} 

당신은 Google Play의 예를 얻을 수있는 결과를

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() { } 
} 

전화를 기다리는 클래스 생성 : https://play.google.com/store/apps/details?id=com.simplesoft.metro

소스 코드 : https://github.com/tripolskypetr/NearestMetro