Xamarin Androidプロジェクトでマップ コントロールを使う
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" />