前回の続きになります。

まずは大きな壁となっていた『Xam.Plugin.Geolocator』で現在地が取得できない問題ですが、試行錯誤の結果、解決に至りました。

前回の記事に追記していってもよかったのですが、パッケージ統合の経緯にも繋がる話なので、(迷惑ですが)記念に残しておこうと思います。

ということで、今回はうまくいかなかった現在地の取得から、GoogleMap上のライン表示までご紹介していきます。

現在地の取得問題

発生した現象

これまで下記のコードを使用して現在地の取得を行ってきました。

しかし上記の非同期メソッド実行時に応答がなく、タイムアウトまでは待ちませんでしたが、結果として取得できませんでした。

現象について調べてみた

まずはパッケージのGitHubサイトを確認してみました。

注目すべきは『The Future: Xamarin.Essentials』の部分です。

和訳はGoogle先生に任せるとして、要約すると「将来的には『Xamarin.Essentials』に統合される」となります。

対処方法

ということで、『Xam.Plugin.Geolocator』ではなく、『Xamarin.Essentials』を使用して現在地の取得を行うことにしました。

次なる壁

ところが、いざインストール、というところでプロジェクトが依存関係の最小バージョンを満たしていないことが判明しました。

迷わずAndroidのターゲットを『Android 8.1』に、次いで全Nugetパッケージも更新したところ、下記のエラーが発生。

ざっと(と言っても検索結果は2件だけ)調べてみたところ、『Xamarin.Build.Download』というパッケージの最新化で解消した事例を発見。

依存関係に含まれていないパッケージのインストールで改善、という点に違和感は感じつつもインストールしてみました。

しかし、エラー解消せず

最終的に

結論から言うと、私の場合は『VisualStudioの更新』で何とかエラーが消えました。

原因が不明なままですが、ひとまず開発環境も含めてすべて最新化することをオススメします。

GoogleMap上のライン表示

ということで、原因不明なまま何とかエラーを解消し、前回分のピン表示まで確認できたので、いよいよ本題に入っていこうと思います。

※現在地取得の詳細は後ほど。

今回は以下の環境で実装を行いました。

View

GoogleMap上にラインを表示するには『Polyline』というクラスを使用します。

MVVMでの実装を行うために、Viewには『BindingPolylinesBehavior』を追加します。

Activity

Xamarin.Essentials』使用にあたり、初期化が必要になります。

ViewModel

現在地の取得も含めて、コードを見て頂いた方が早いかと…。

現在地の取得を行っているのは下記のコードです。

Xam.Plugin.Geolocator』を使用していた時よりも、可読性に優れましたね。

実装としては、ラインを引く地点を『Polyline』オブジェクトに設定し、バインドするだけです。

実行結果がこちら。

2地点間にラインを引くことが出来ました。

次回予告

次回は今回行ったライン表示を活用していきます。

以上です。

スポンサーリンク