Android
C#
Xamarin

Xamarin.Android でオレオレ Application クラスを使う

More than 3 years have passed since last update.

オレオレApplicationクラスって、コレのことなんですが、正式名称知らないので勝手にこう呼んでます(^_^;)

Xamarin.Android では、Application クラスを継承するのに加えてもう二手間くらい必要みたいです。割と苦労したのでメモしておきます。

AndroidManifest.xml へ追記

Xamarin.Android では最初は AndroidManifest.xml は存在しないのですが、このような手順で追加できます。

んで、<application> タグに android:name 属性を追記します。ここは Android本家と同じ要領です。

AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    android:versionCode="1" android:versionName="1.0" package="HelloXamarinAndroiid.HelloXamarinAndroiid">
    <uses-sdk />
    <application android:label="HelloXamarinAndroiid" android:name=".MyApplication">
    </application>
</manifest>

Application クラスを継承したクラスを作る

次に、クラスの実装ですが、Application クラスから派生させる他、

  • [Application] 属性を付ける
  • (IntPtr, JniHandleOwnership) なコンストラクタを用意する

ことが必要なようです。

こんなかんじ。

MyApplication.cs
namespace HelloXamarinAndroiid
{
    [Application] // この属性が必要らしい
    class MyApplication : Application
    {
        // このコンストラクタを明示的に override する必要があるらしい
        public MyApplication (IntPtr javaReference, JniHandleOwnership transfer)
            : base(javaReference, transfer)
        {
        }

        public override void OnCreate()
        {
            base.OnCreate();
            // Test
            Android.Util.Log.Debug("MyApplication", "OnCreate called.");
        }
    }
}

アプリを動かすと、ログが出力されてるのでこの手順でいいのかと。

参考