読者です 読者をやめる 読者になる 読者になる

Xamarin 日本語情報

Xamarin(ザマリン) の代理店だったエクセルソフト田淵のブログです。主に Xamarin に関するエントリーをアップしていきます。(なるべく正しい有益な情報を掲載していきたいと考えていますが、このブログのエントリーは所属組織の公式見解ではありませんのでご注意ください)

Xamarin.Android の MapFragment.Map が deprecated です

Xamarin Xamarin.Android

こんにちは。エクセルソフトの田淵です。

Xamarin ドキュメントの Google Map の章 にある Xamarin.AndroidGoogle Map のコードです。

MapFragment mapFrag = (MapFragment) FragmentManager.FindFragmentById(Resource.Id.my_mapfragment_container);
GoogleMap map = mapFrag.Map;
if (map != null) {
    // The GoogleMap object is ready to go.
}

MapFragment の Map が使われていますが、depracated だと怒られるんですよね。

Android Java の場合

どうすればいいのかな?ということで GoogleAndroid ドキュメントを見てみました。

マップ オブジェクト  |  Google Maps Android API  |  Google Developers

OnMapReadyCallback インターフェースを実装し、onMapReady(GoogleMap) コールバック メソッドを使用して GoogleMap オブジェクトに対するハンドルを取得します。

フラグメントで getMapAsync() を呼び出して、コールバックを登録します。

ふむふむ。

public class MainActivity extends FragmentActivity
    implements OnMapReadyCallback {
...
}

次に、getMapAsync() を使用して、フラグメントにコールバックを設定します。

MapFragment mapFragment = (MapFragment) getFragmentManager()
    .findFragmentById(R.id.map);
mapFragment.getMapAsync(this);

ふむふむ。

C# で書き直してみます。

ベーシックな部分は @amay077 さんの Build Insider の記事をご覧ください。

www.buildinsider.net

記事では Xamarin Component を使用していますが、現在は分割されたライブラリが NuGet にありますので、そちらを使います。

f:id:ytabuchi:20160626122626p:plain:w450

using を追加して、Android ドキュメントの通りに IOnMapReadyCallback の継承を追加します。

using Android.Gms.Maps;
using Android.Gms.Maps.Model;

...

public class MainActivity : Activity, IOnMapReadyCallback

OnCreate メソッド内に Google Map 呼び出しを追加します。これも Android ドキュメント通りですね。

var mapFrag = (MapFragment)FragmentManager.FindFragmentById(Resource.Id.myMap);
mapFrag.GetMapAsync(this);

Visual StudioIOnMapReadyCallback.OnMapReady(GoogleMap) の実装が無いとアラートしてくれているので、追加し、そこに Map 表示時の初期設定を記載します。後でマップを操作するので、クラス変数に GoogleMap gMap を追加しています。

public void OnMapReady(GoogleMap map)
{
    gMap = map;
    // 初期設定
    gMap.UiSettings.MyLocationButtonEnabled = true;
    gMap.UiSettings.ZoomControlsEnabled = true;
    gMap.MoveCamera(CameraUpdateFactory.NewLatLngZoom(new LatLng(35.6586d, 139.7454d), 15f));
}

これで無事 Google Map が起動しました。

f:id:ytabuchi:20160626124846p:plain:w450

Emulator は Google APIs Intel Atom (x86) を使用しました。快適♪

f:id:ytabuchi:20160626124902p:plain:w300

これであってるのかどうか、識者の方はコメントいただけると嬉しいです。

Xamarin 気になった方は

是非 ダウンロード して触ってみてください。Visual Studio 2015 をご利用の方は Update 2 にアップデートする際にカスタムインストールで Xamarin を追加しましょう。 学習用リソースJXUG リンクページ に参考資料を纏めてますので併せてどうぞ。

Xamarin の情報が欲しい方はこのブログも購読いただいたり、私のTwitterアカウントをフォローいただいたりすると嬉しいです。

私が所属している エクセルソフト の宣伝を少しさせてください。弊社は開発者向けの様々なソフトウェアを扱っています。おなじみの ReSharper (JetBrains)、 や Atlassian の JIRA, Confluence、Office/PDF ファイルを .NET/Java で操作するライブラリ Aspose(アスポーズ)Windows アプリ、Web ページ、iOS/Android アプリの UI テストができる TestComplete などお勧めです(^^) また、Visual Studio Professional/Enterprise with MSDN も販売してますし、日本で売っていない海外のソフトウェア、開発ツールなどを弊社経由で日本円で購入頂くことも可能です。ご興味あれば 弊社ページ を覗いてみてください。

以上です。