0

私はxamarinフォームで作業しています。私は、アンドロイドのために位置情報サービスが有効かどうかをチェックする必要があります。私は次のコードを書いた:IsProviderEnabledは、常にロケーションサービスが有効か無効かを返します。

LocationManager locMgr = GetSystemService(LocationService) as LocationManager; 
    string Provider = LocationManager.GpsProvider; 
    var islocationEnabled = locMgr.IsProviderEnabled(Provider); 

しかし、私はいつも真の価値を得ているか、位置サービスが有効かどうか。どのように私は正しい価値を得ることができますか?

+0

エミュレータまたはリアルデバイスを使用していますか? –

+0

エミュレータとリアルデバイスの両方でテストしました。しかし同じ結果が本当に得られる – anand

答えて

0

Xamarin.Formsで作業している場合、ナゲットパッケージXam.Plugin.Geolocatorを使用してみませんか?私はそれを使用しています。私は自分のPCLに自分のロケーションコードを入れました。クロスプラットフォームなので、繰り返しはありません。あなたは本当にAndroidの場所が必要な場合は、このスニペットを取って、あなたのアンドロイドプロジェクトにまっすぐに置くことができます。

return await Plugin.Geolocator.CrossGeolocator.Current.GetPositionAsync(); 
:必要であれば、これはすべて1行に集光することができる

public class LocationService : ILocationService 
{ 
    readonly ILogger _logger; 
    public LocationService(ILogger logger) 
    { 
     _logger = logger; 
    } 

    public async Task<IPosition> GetPosition() 
    { 
     var locator = Plugin.Geolocator.CrossGeolocator.Current; 

     //1609 meters in a mile. Half a mile accuracy should be good 
     //since we are rounding to whole numbers 
     locator.DesiredAccuracy = 800; 

     try 
     { 
      var position = await locator.GetPositionAsync(5000); 

      return position.ToPosition(); 
     } 
     catch (Exception ex) 
     { 
      _logger.Log(ex); 
      return null; 
     } 
    } 
} 

(私は、それ故にラッパークラス及び例のインターフェイスをその影響を最小限に抑えることができるので、私は、通常、プラグインをラップ)

EDIT: プラグインには、IsGeolocationEnabledIsGeolocationAvailableのようなジオロケーションのステータスを判断する方法もあります。 オープンソースなので、implementation on Androidを見ることができます。

+0

しかし、私は位置情報サービスが有効かどうかを知る必要があります。ここでは、ロケーションサービスについてではなくデバイスのロケーションを取得しています。 – anand

+0

@anandこれはオープンソースプロジェクトであるため、実装を見ることができます。それはあなたがちょうどそれをチェックアウトする場合あなたが探しているメソッドがあります。正確なリンクで投稿を更新しました。 – valdetero

+0

更新をありがとう、私はそれを試みたが、どちらの場合でも、どちらかの位置情報サービスが有効かどうかになっている。 – anand

0

あなたがPlugin.Geolocator.CrossGeolocatorを使用している場合は、この点に注意してください。

は場所のための唯一のApp権限後に正しい情報が許可された返しIsGeolocationAvailableをIsGeolocationEnabled !!!!!

あなたは場所サービスを使用すると、場所のApp権限を許可する前に、あなたはこのようにしなければならないモバイルで有効になっているかどうかを知りたい場合は、次の

アンドロイド

public bool IsLocationGpsEnabled() 
    { 
     var _locationManager = (LocationManager)Forms.Context.GetSystemService(Context.LocationService); 
     if (_locationManager.IsProviderEnabled("gps")) 
     { 
      return true; 
     } 

     return false; 
    } 

のiOS

public bool IsLocationGpsEnabled() 
    { 
     return CLLocationManager.LocationServicesEnabled; 
    } 
関連する問題