2016-08-13 15 views
1
私は

Xamarinフォームは、Get場所

var locator = CrossGeolocator.Current; 

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

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

Xamarinフォームに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コードにアクセスし、現在の場所を取得できます。

結果を待ちます

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

が再生あなたがGoogleでの例を得ることができます

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

関連する問題