Xamarin Mapを表示する

Xamarin Androidプロジェクトでマップ コントロールを使う

参考:Xamarin Mapの操作

Xamarin.Forms.Mapsのインストール

NuGetでXamarin.Forms.Mapsパッケージをインストールする

Androidプロジェクトで初期化する

  • Androidプロジェクトの「MainActivity.cs」を開く
  • 「OnCreate」内の「Xamarin.Forms.Forms.Init(this, savedInstanceState);」の行を探す
  • 「Xamarin.Forms.Forms.Init」の後に次のコードを追加する
Xamarin.FormsMaps.Init(this, savedInstanceState);
 

AndroidManifest.xmlの修正

Androidプロジェクト「Properties」内のAndroidManifest.xmlを修正する

Google Maps API キーを追加する

Google Cloud Platformで作成したGoogle MAPS API キーをAndroidManifest内の<application>要素に追加する
※「PASTE-YOUR-API-KEY-HERE」にGoogle MAPS API キーを入力

<meta-data android:name="com.google.android.geo.API_KEY" android:value="PASTE-YOUR-API-KEY-HERE" />
 

Google Play services のバージョン番号の指定と

AndroidManifest内の<application>要素内に追加する

<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
 

Apache HTTP レガシーライブラリの要件を指定

AndroidManifest内の<application>要素内に追加する

<uses-library android:name="org.apache.http.legacy" android:required="false" />
 

以下のコードの「PASTE-YOUR-API-KEY-HERE」に取得したGoogle MAPS API キーを入力する
※プロジェクト名「Map01」として

<application android:label="Map01.Android">
  <meta-data android:name="com.google.android.geo.API_KEY" android:value="PASTE-YOUR-API-KEY-HERE" />
  <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
  <uses-library android:name="org.apache.http.legacy" android:required="false" />
</application>
 

ユーザーの場所のアクセス許可

AndroidManifest内の<manifest>要素に以下のコードを追加する

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
 

MainActivityの修正

Androidプロジェクトの「MainActivity.cs」を修正する

フィールドの追加

const int RequestLocationId = 0;

readonly string[] LocationPermissions =
{
    Manifest.Permission.AccessCoarseLocation,
    Manifest.Permission.AccessFineLocation
};
 

OnStart()メソッドのオーバーライドを追加する

protected override void OnStart()
{
    base.OnStart();

    if ((int)Build.VERSION.SdkInt >= 23)
    {
        if (CheckSelfPermission(Manifest.Permission.AccessFineLocation) != Permission.Granted)
        {
            RequestPermissions(LocationPermissions, RequestLocationId);
        }
        else
        {
            // Permissions already granted - display a message.
        }
    }
}
 

OnRequestPermissionsResult()メソッドのオーバーライドを書き換える

public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Permission[] grantResults)
{
    if (requestCode == RequestLocationId)
    {
        if ((grantResults.Length == 1) && (grantResults[0] == (int)Permission.Granted))
        {
            // Permissions granted - display a message.
        }
        else
        {
            // Permissions denied - display a message.
        }
    }
    else
    {
        base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
    }
}
 

マップを表示する

Pageの<ContentPage>要素に「xmlns:maps」を追加する

xmlns:maps="clr-namespace:Xamarin.Forms.Maps;assembly=Xamarin.Forms.Maps"
 

Controlを追加する

<maps:Map x:Name="map" />
 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください