1
1

More than 5 years have passed since last update.

Xamarin.Android で Fused Location Provider(など)を使う

Last updated at Posted at 2013-05-25

Xamarin.Android は [Java ライブラリから C# のラッパを生成する機能](http://docs.xamarin.com/guides/android/advanced_topics/java_integration_overview/binding_a_java_library_(.jar) がとっても強力(Binding というみたい)なので、Fused Location Provider や Geofencing など、Google I/O 2013 で発表された新機能が入った google-play-service.jar も使えるはずだ、と思い試してみました。

monodroid-samples をベースに

Xamarin.Android のサンプル集 monodroid-samples に、既に Google Map v2 を使うサンプルがあり、これが Google Play Service を使っているので、これを参考にします。

これね → MapsAndLocationDemo_v2 、使い方は、

をどうぞ。

Binding の設定をいじる

Android SDK の Google Play Service をアップデートしても、Xamarin 側ですぐに LocationClient などが使えるわけではないです。
プロジェクト GooglePlayServices で、ラップする package などを設定しているため。

その設定は Transform/Metadata.xml にあるので、これを以下のように設定します。

Metadata.xml
<metadata>
    <remove-node path="/api/package[@name='com.google.android.gms.maps']/class[@name='GoogleMapOptionsCreator']" />
    <remove-node path="/api/package[@name!='com.google.android.gms.maps' 
        and @name != 'com.google.android.gms.maps.model' 
        and @name != 'com.google.android.gms.common'
        and @name != 'com.google.android.gms.location']" />
    <remove-node path="/api/package[@name='com.google.android.gms.maps.model']/class[contains (@name, 'Creator')]" />
    <remove-node path="/api/package[@name='com.google.android.gms.location']/class[contains (@name, 'Creator')]" />

    <attr path="/api/package[@name='com.google.android.gms.maps']" name="managedName">Android.Gms.Maps</attr>
    <attr path="/api/package[@name='com.google.android.gms.maps.model']" name="managedName">Android.Gms.Maps.Model</attr>
    <attr path="/api/package[@name='com.google.android.gms.common']" name="managedName">Android.Gms.Common</attr>  
    <attr path="/api/package[@name='com.google.android.gms.location']" name="managedName">Android.Gms.Location</attr>  

    <attr path="/api/package[@name='com.google.android.gms.maps.model']/class[@name='MarkerOptions']/method[@name='position']" name="managedName">SetPosition</attr>
    <attr path="/api/package[@name='com.google.android.gms.maps.model']/class[@name='MarkerOptions']/method[@name='snippet']" name="managedName">SetSnippet</attr>
    <attr path="/api/package[@name='com.google.android.gms.maps.model']/class[@name='MarkerOptions']/method[@name='title']" name="managedName">SetTitle</attr>
</metadata>

com.google.android.gms.location を各所に追加しています。変更前は こちら

これだけで OK。(がここにたどり着くまでに半日くらいかかったorz)

使う

これでリビルドすると、この GooglePlayServices を参照しているプロジェクトで、Android.Gms.Location.LocationClient などが使えるようになります。(Xamarin Studio を再起動しないとコード入力補完(Inteli先生 というのか?) に認識されないみたいですが。)

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1