當我們製作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 排成工作代理程式

0

接下來打開 剛剛開好 ScheduledTaskAgent1 專案底下的 ScheduledAgent.cs 檔案

 

protected override void OnInvoke(ScheduledTask task) { //這邊是你想要做的事情,背景服務會一直重複幫你做 ScheduledActionService.LaunchForTest(tTask.Name, TimeSpan.FromSeconds(60)); NotifyComplete(); }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

1

到這邊我們已經完成一大半了!! 接下來是要怎麼樣才能啟動背景服務呢?!

看你需要在什麼時候啟動服務就把以下的程式碼加進去 以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));

 

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

文章中的敘述如有觀念不正確錯誤的部分,歡迎告知指正 謝謝
http://www.sukitech.com/?p=184
轉載請註明出處

One Thought on “Windows Phone 8 C# 背景服務 ScheduledAgent 教學 範例

  1. nethawk on 2016-01-04 at 10:40 下午 said:

    hi SUKI 你好
    我正在學習UWP程式﹐請教你﹐在WP10 撰寫universal app 的背景服務﹐是否仍然要如同本篇一樣新增「Windows Phone 排成工作代理程式」的專案?
    我在VS2015 新增專案下在Windows->Windows 8->windows Phone下找到「排程工作代理程式(Windows Phone Silverlight)」這個不屬於通用的程式﹐用了這個是不是就只能限定在Windows phone平台下執行了?但通用之下又找不到排程工作代理的專案模版﹐好納悶…

發表迴響

你的電子郵件位址並不會被公開。

Post Navigation