2014-01-29 10 views
17

如何在Xamarin.Android中註冊我自己的應用程序子類?

public class MyApp : Application 

在Java中我會添加一行到清單,並將它傳遞我的應用程序的名稱空間和名稱:

<application android:icon="@drawable/icon" android:label="@string/app_name" 
    android:name="com.devahead.extendingandroidapplication.MyApplication"> 

在Xamarin,有[Application]屬性,但文檔指出Name成員是not supported。那麼如何讓我的子類註冊?在哪裏應用該屬性?

如果我將該屬性添加到我的子類,我得到:

System.NotSupportedException: Unable to activate instance of type TestClient_Android.MyApplication from native handle 14d00019 

回答

47

發現了它。文檔已過時。您將需要參數特殊c'tor你會添加[Application]屬性:

[Application] 
public class MyApplication : Application 
{ 
    public MyApplication(IntPtr handle, JniHandleOwnership ownerShip) : base(handle, ownerShip) 
    { 
    } 
} 

編輯:此外,它似乎有一個重寫的OnCreate()。如果你有只有的構造函數,它不會被調用。

public override void OnCreate() 
{ 
    // If OnCreate is overridden, the overridden c'tor will also be called. 
    base.OnCreate(); 
} 

編輯2015年11月:這裏到Xamarin文檔這也解釋了why this behavior exists的鏈接。

... Xamarin.Android通過在 構建過程中添加 mono.MonoRuntimeProvider的ContentProvider到AndroidManifest.xml中鉤到這一點。 mono.MonoRuntimeProvider.attachInfo()方法是 ,負責將Mono運行時加載到進程中。任何 嘗試在此之前使用單聲道將失敗。 (注:這是 爲什麼它繼承Android.App.Application類型需要提供 (IntPtr的,JniHandleOwnership)構造,作爲應用程序實例之前單可以初始化 創建。)

+0

提斯真的很難找到這樣的答案mono/xamarin android –

+0

我發現[這裏](http://stackoverflow.com/a/9963637/426227)或[這裏](https://manski.net/2012/04/創建一個應用程序類在單聲道的Android /)略有不同('javaReference'而不是'句柄')。這是否有所作爲? – testing

+0

@測試你如何命名參數無關緊要。類型必須匹配。 – Krumelur

相關問題