0

Service から構築された BroadcastReceiver を作成しました。BroadcastReceiver は Service と対話する必要があるためthis、コンストラクターに渡します。[BroadcastReceiver]-Attribute を追加して (MonoDevelop で) コンパイルしようとすると、

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)

Mono for Android がこの既定のコンストラクターを必要とするのはなぜですか? デフォルトのコンストラクターで BroadcastReceiver を作成することはありますか (この場合、BroadcastReceiver は正しく動作しません)。

4

1 に答える 1

6

BroadcastReceiverを使用して登録する場合にのみ必要ですAndroidManifest。Android はリフレクションを使用してレシーバーをインスタンス化し、デフォルトのコンストラクターを必要とします (そうしないと、どの引数を渡すべきかわかりません)。

を使用してコードでブロードキャスト レシーバーを登録しているようですContext.registerReceiver。この場合、receiverタグを追加する必要はありませんAndroidManifest

于 2013-01-10T20:00:18.810 に答える