2013-01-10 85 views
0

我創建了一個由服務構建的BroadcastReceiver。 BroadcastReceiver需要與服務進行交互,因此我將this傳遞給構造函數。添加[廣播接收器] -Attribute並試圖編譯(與MonoDevelop的)後,我得到爲什麼BroadcastReceiver需要一個默認構造函數?

D:\Programme\MSBuild\Novell\Novell.MonoDroid.Common.targets(3,3): Error MSB4018: Unerwarteter Fehler bei der GenerateJavaStubs-Aufgabe. 

System.InvalidOperationException: The type 'keepass2android.TimeoutService/MyBroadcastReceiver' needs to have a public default constructor. 
    at Xamarin.Android.Tasks.ManifestDocument.Merge(List`1 subclasses, List`1 selectedWhitelistAssemblies, Boolean embed) 
    at Xamarin.Android.Tasks.GenerateJavaStubs.Execute() 
    at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute() 
    at Microsoft.Build.BackEnd.TaskBuilder.ExecuteInstantiatedTask(ITaskExecutionHost taskExecutionHost, TaskLoggingContext taskLoggingContext, TaskHost taskHost, ItemBucket bucket, TaskExecutionMode howToExecuteTask, Boolean& taskResult) (MSB4018) (keepass2android) 

爲什麼單爲Android需要這個默認的構造函數?它是否會用默認的構造函數創建我的BroadcastReceiver(在這種情況下,BroadcastReceiver將不能正常工作)?

回答

6

只有在您使用AndroidManifest註冊BroadcastReceiver時才需要。 Android使用反射來實例化接收器,它需要一個默認構造函數(否則,它不知道應傳遞哪些參數)。

看起來您正在使用Context.registerReceiver以代碼註冊您的廣播接收器。在這種情況下,您不需要在AndroidManifest

+0

中添加receiver標記如何以編程方式執行「exported = true」?我需要它,因爲我想爲我的BroadcastReceiver提供構造函數參數。 – JohnyTex

相關問題