2013-01-10 86 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

相关问题