Windows Phone 8 C# 背景服務 ScheduledAgent 教學 範例

當我們製作APP的時候常常會需要背景服務,為什麼呢!?
因為我們希望APP能夠不在使用者看到的情況下或是當離開APP時去持續做一些事情,這個時候就就需要ScheduledAgent來幫我們完成工作啦!!
ScheduledAgent 就很像是開發Android上的 Service !! 可以在背景中處理一些使用者需要的資訊。

當我們製作APP的時候常常會需要背景服務,為什麼呢!?

因為我們希望APP能夠不在使用者看到的情況下或是當離開APP時去持續做一些事情,這個時候就就需要ScheduledAgent來幫我們完成工作啦!!

ScheduledAgent 就很像是開發Android上的 Service !!  

ScheduledAgent 背景服務也有使用上的限制,並不是可以為所欲為的做事情唷!!

允許:

      Tiles
      Toast
      Loction
      Network
      R/W ISO Store
      Socket
 
不允許
      UI
      XNA Libraries
      相機&麥克風
      感應器 Sensor
      多媒體 Play Audio (可以使用Background audio APIs)



接下來是使用 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));

 

 

如此便可以製作背景服務囉!!

 

文章中的敘述如有觀念不正確錯誤的部分,歡迎告知指正 謝謝
轉載請註明出處

 

SUKI

HOLIESTAR