まず、PeriodicTaskが数日前にすでに機能していたことから始めましょう。しかし、何か他のことをするために戻ったとき、PeriodicTaskのOnInvokeがもう呼び出されていないことに気付きました。
基本は正しいと思います。既存のPeriodTaskが見つかった場合は削除し、デバッグビルドでのみLaunchForTestを呼び出し、ScheduledAgentがプロジェクトとWMAppManifest.xmlで正しく参照されていることを確認しました。
これが私がPeriodicTaskを設定する方法です:
try
{
PeriodicTask backgroundTask = null;
backgroundTask = ScheduledActionService.Find(BGTASK_NEW_EPISODES) as PeriodicTask;
if (backgroundTask != null)
{
ScheduledActionService.Remove(backgroundTask.Name);
}
// Start our background agent.
backgroundTask = new PeriodicTask(BGTASK_NEW_EPISODES);
backgroundTask.Description = "Foobar";
ScheduledActionService.Add(backgroundTask);
#if DEBUG
ScheduledActionService.LaunchForTest(BGTASK_NEW_EPISODES, TimeSpan.FromSeconds(5));
#endif
}
catch (InvalidOperationException e)
{
if (e.Message.Contains("BNS Error: The action is disabled"))
{
App.showNotificationToast("Background tasks have been disabled from\nsystem settings.");
}
}
catch (Exception) { }
}
これが私のWMAppManifest.xmlです。
<ExtendedTask Name="BackgroundTask">
<BackgroundServiceAgent Specifier="ScheduledTaskAgent" Name="PodcatcherBackgroundService" Source="PodcatcherBackgroundService" Type="PodcatcherBackgroundService.ScheduledAgent" />
</ExtendedTask>
アプリを初めてインストールすると、OnInvokeが呼び出されます。しかし、アプリを再起動しても呼び出されません。同じことがデバイスとエミュレータの両方に当てはまります。
また、設定でバックグラウンドタスクが有効になっていて、バッテリーが完全に充電されていることを確認しました(デバイスはWP7デバイスであり、USB経由でPCに接続されています。エミュレーターの場合、もちろんこれは問題ではありません)。
では、次に何を確認すればよいですか?
ありがとう!