オレオレ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.");
}
}
}
アプリを動かすと、ログが出力されてるのでこの手順でいいのかと。
参考
- Working with AndroidManifest.xml | xamarin 公式。ちょっとこれだけじゃ分かんなかったっす。
- c# - Custom Application child class in Mono for Android - Stack Overflow Application そして StackOverflow のお世話に。