PG.Lib

アプリ開発関連とかガジェット関連とか

Xamarin Forms 位置情報を取得してみる

Xamarin.Forms で位置情報を普通に取得しようとした場合、プラットフォームごとの実装が必要になってきます。

それではちょっと敷居が高いので、各プラットフォーム共通で動作するプラグインを使ってみることにしました。

パッケージの導入

Xam.Plugin.Geolocator をNugetからインストールします。

f:id:fxxk_authority:20170510093310p:plain

GitHubのページはこちら

github.com

ソースコード

位置情報の更新があった場合に、値を更新するサンプルです。

まずは usign を追加します。

using Plugin.Geolocator;


続いて初期化をします。

private void SetGeolocator()
{
    try
    {
        var locator = CrossGeolocator.Current;
        locator.DesiredAccuracy = 50;
        locator.PositionChanged += Locator_PositionChanged;
    }
    catch (Exception)
    {
        throw;
    }

}

ボタンクリックとか、フォームロード時とか、適当なタイミングでこの関数を呼ぶようにしましょう。


最後にイベントを定義します。

private void Locator_PositionChanged(object sender, Plugin.Geolocator.Abstractions.PositionEventArgs e)
{
    dat.decValue = (decimal)e.Position.Latitude;
}

Positionのプロパティの中に、緯度、経度、高度、速度などの情報が入っています。

プロジェクト設定

ソースコードだけでなく、位置情報を使いますよー と各プラットフォームで宣言する必要があります。

UWP の場合

UWP プロジェクトの Package.appxmanifest を開きます。

続いて 機能 のタブの中の 場所 にチェックを入れます。

f:id:fxxk_authority:20170510095746p:plain

Android の場合

Android プロジェクトのプロパティを開きます。

Android マニフェスト のタブの中の ACCESS_COARSE_LOCATION と
ACCESS_FINE_LOCATION にチェックを入れます。

f:id:fxxk_authority:20170510100027p:plain

ビルドエラー

このプラグインを入れると Androidプロジェクトのビルドが通らなくなるようですね。

MainApplication.cs の [Application] 属性を外すことで対応しました。

以下のサイトを参考に対応しました。

[Xamarin.Forms] 「"GenerateJavaStubs" タスクが予期せずに失敗しました。」というビルドエラーが発生 - Qiita



と、ここまで書きましたが、まだ実機では試せてなかったりします…

間違ってたら訂正しますね。