當我們製作APP的時候常常會需要背景服務,為什麼呢!?
因為我們希望APP能夠不在使用者看到的情況下或是當離開APP時去持續做一些事情,這個時候就就需要ScheduledAgent來幫我們完成工作啦!!
ScheduledAgent 就很像是開發Android上的 Service !! 可以在背景中處理一些使用者需要的資訊。
當我們製作APP的時候常常會需要背景服務,為什麼呢!?
因為我們希望APP能夠不在使用者看到的情況下或是當離開APP時去持續做一些事情,這個時候就就需要ScheduledAgent來幫我們完成工作啦!!
ScheduledAgent 就很像是開發Android上的 Service !!
ScheduledAgent 背景服務也有使用上的限制,並不是可以為所欲為的做事情唷!!
允許:
接下來是使用 C# + Xaml 做一個簡單的教學
首先在你開啟的方案底下再建立一個專案
右鍵→加入→新增專案→Windows Phone 排成工作代理程式
接下來打開 剛剛開好 ScheduledTaskAgent1 專案底下的 ScheduledAgent.cs 檔案
protected override void OnInvoke(ScheduledTask task)
{
//這邊是你想要做的事情,背景服務會一直重複幫你做
ScheduledActionService.LaunchForTest(tTask.Name, TimeSpan.FromSeconds(60));
NotifyComplete();
}
接下來打開原本專案的 WMAppManifest.xml 右鍵 檢視程式碼
在WMAppManifest.xml 底下必須要加入一些相關的任務資訊
找到<Task>的標籤 加入以下程式碼,來新增這個任務的授權
<ExtendedTask Name="BackgroundTask">
<!-- Name, Source, Type 為實作Background Agent的專案 -->
<BackgroundServiceAgent Specifier="ScheduledTaskAgent" Name="ScheduledTaskAgent1" Source="ScheduledTaskAgent1" Type="ScheduledTaskAgent1.ScheduledAgent" />
</ExtendedTask>
接下來必須要入參考,為什麼呢?! 因為在你的方案底下其實是兩個獨立的專案,它們兩個完全不相關。
所以呢我們將主要APP的參考中加入ScheduledTaskAgent1
到這邊我們已經完成一大半了!! 接下來是要怎麼樣才能啟動背景服務呢?!
看你需要在什麼時候啟動服務就把以下的程式碼加進去 以APP開啟時為例,打開app.xmal.cs,找到 Application_Launching 的方法把程式碼加進去,背景服務就會在APP開啟時自動執行囉!
private void Application_Launching(object sender, LaunchingEventArgs e)
{
//TaskName 依照個人喜好
String TaskName="MyTask";
if (ScheduledActionService.Find(TaskName) != null)
{
ScheduledActionService.Remove(TaskName);
}
// 建立一個新的Constant.TaskName物件,並且設定2個小時後過期;
PeriodicTask tTask = new PeriodicTask(TaskName);
tTask.Description = "這邊是任務的描述,可以打中文。";
tTask.ExpirationTime = DateTime.Now.AddHours(2);
try
{
ScheduledActionService.Add(tTask);
// 在Debug模式下,利用LauchForTest進行測試。實際上為30分鐘一次
// 在這邊為了加速測試加入以下程式碼
ScheduledActionService.LaunchForTest(tTask.Name, TimeSpan.FromSeconds(60));
}
catch
{
MessageBox.Show
("至手機的[設定]=>[應用程式]=>[背景工作]檢查","請確認手機已授權背景服務", MessageBoxButton.OK);
}
}
如果要中斷背景服務的話非常簡單! 照做剛剛的部分程式碼就可以囉!
String TaskName="MyTask";
if (ScheduledActionService.Find(TaskName) != null)
{
ScheduledActionService.Remove(TaskName);
}
這邊注意一下,測試間隔盡量以60秒以上比較會正常執行,就算設定60秒以下,APP還是會以60秒為主。
ScheduledActionService.LaunchForTest(tTask.Name, TimeSpan.FromSeconds(60));
如此便可以製作背景服務囉!!