WP7 - 讓你的程式出現在Tile中也有功能 - Live Tile

Windows Phone 7 - 讓你的程式出現在Tile中也有功能 – Live Tile

在之前一篇<Windows Phone 7 – Push Notification基本概念詳述>提到透過Push Notification可以修改WP7中Tile上的內容,

那如果只是一般的程式,希望在App被Spit在WP7的Quick Lanuch畫面成為Tile後,App可以在背景處理Tile中的資料並顯

示於畫面上。那我應該要怎麼處理呢?

 

Tile是出現在WP7新的一個概念,有人它就像其他手機平台上的Widget,我覺得是二者應用上確實有相似,

但Tile的設計我覺得提供更豐富的效果,不管只是訊息通知或是其他動態資源的應用,二者之間還是有所差異性。

在進入開發之前,再重新複習一下Tile的相關原理。

 

〉Tile原理

透過App程式設定監聽的Process去等待Server端送入的Web Response中,包括指定的Tile專用XML內容時,進行內容的拆解

與相關遠端資源的取得。然而,Tile針對遠端資源的取得,也有資源大小與下載時間限制,如果今天遠端資料的Size超過

80KB或是下載時間超過60 seconds,那將會失敗,如果超過3次,Tile的更新任務就會被終止。

如果今天Tile使用的資源(例如:背景圖)是使用Device中的話,記得把XAP中的內容Copy到Isolated Storage中。

 

*即便WP7是在置閒(Idle)或是鎖定(Lock)模式下,仍然支援Tile更新。(但這也表示,開發出來的App,將會占住了不少的資源

與消耗電池的容量,這是需要注意的)

 

大致了解了Tile運作的原理後,接下來將說明製作Live Tile幾個重要的類別:

ShellTileSchedule Class

該類別故名思義,它負責排程完成Tile定期運作的任務。用於更新Tile的Background Image。然而,該類別有幾項特別注意

的屬性:

名稱 說明
Interval 設定間隔多久更新一次Tile的背景圖示。Value使用UpdateInterval Enumeration列舉:EveryHour、EveryDay、EveryWeerk、EveryMonth。更新區間內不會出現同時有二次要更新。
MaxUpdateCount 設定在排程更新失效之前,最大更新次數。
Recurrence 設定更新進行的方式是屬於一次性更新或是多次性更新。使用UpdateRecurrence Enumeration列舉:Onetime、Interval。
RemoteImageUri 設定遠端圖片的URI物件。
StartTime 設定排程開始的時間。

 

參考一下MSDN上的Sample Code:

[注意]:以下的Code記得放罝於App.xaml.cs之中。並且在App.xaml.cs中的App()方法加上需要使用的方法。

另外,目前Live Tile只支援RemoteImageUri為Online於外部網站或WebService的圖片,不支援Local Resource中的資料。

希望未來可以提供。

   1: //建立區間多次更新排程
   2: private void CreateMultiTimeSchedule()
   3: {
   4:     mySchedule = new ShellTileSchedule();
   5:  
   6:     // Run the schedule every day for seven days, unless StopACurrentSchedule is called.
   7:     mySchedule.Interval = UpdateInterval.EveryDay;
   8:     mySchedule.MaxUpdateCount = 7;
   9:     mySchedule.Recurrence = UpdateRecurrence.Interval;
  10:     mySchedule.RemoteImageUri = new Uri(@"http:\\www.contoso.com\myimage.png");
  11:     mySchedule.StartTime = DateTime.Now;
  12:  
  13:     mySchedule.Start();
  14: }
  15:  
  16: //建立單次更新排程
  17: private void CreateOneTimeSchedule()
  18: {
  19:     mySchedule = new ShellTileSchedule();
  20:  
  21:     mySchedule.Recurrence = UpdateRecurrence.Onetime;
  22:     mySchedule.StartTime = DateTime.Now;
  23:     mySchedule.RemoteImageUri = new Uri(@"http:\\www.contoso.com\myimage.png");
  24:  
  25:  
  26:     // Start the schedule two hours from now.
  27:     mySchedule.StartTime.AddHours(2);
  28:  
  29:     mySchedule.Start();
  30: }
  31:  

 

那也許你會跟我一樣,始終覺得透過ShellTileSchedule類別為何只能定期更新背景圖示,但其他的內容卻是沒有辦法修改的

原因在於:「ShellTileSchedule運作的機制」。該類別運作機制:

(1) 當指定的App程式在非執行(Execution Extension)情形下,仍可以透過App.xaml中的設定針對Tile進行資料定期處理。

(2) 該類別也不支援您在Application被Pin to Start後,透過額外的方法擷取系統何時會動態去修改Tile資源的Event Handler。

(3) Tile的內容也不允許自訂Content或Title的部分

因為這三點的因素,造成Tile的管理在不透過Push Notification Service時變得很綁手綁腳,也很難去修寫Title或Content。

當然,我也想過是否可以透過自己模擬HttpResponse的內容送給Device然後讓Tile自行變換。但這個我沒有實際測試過啦,

仍然需要一些證明(不過我已經過看一些論壇上人的提問,看來是不可行的…(例如:(1))。

 

以上是介紹關於如何實作Live Tile隨著設定的更新區間,定期變換Tile中的內容。針對這篇文章的撰寫,

其實是因為自己在開發WP7程式的時候,有時我們會希望某些被加入到Quick Start頁面中的Tile可以提供

一些必要的訊息,例如:未讀取Mail數、未接來電等。那如果今天設計的WP7程式,希望去提示用戶關

於這個程式有用資訊時,不妨可以使用這個方式,可以為自己的程式提供不少價值。(當然,如果可以

結合Push Notification Service的話,將會讓Tile提供更豐富的內容。

 

References:

How to: Update Your Tile Without Push Notifications for Windows Phone

How to: Create and Modify an Application Tile for Windows Phone

Windows Phone 7 Quick Tip #20 - Use ShellTileSchedule to easily update your Live Tiles

WP7 Development Tip of the Day: Live Tiles that use the system theme accent color

WP7 Development Tip of the Day: Using ShellTileSchedule to update your app’s Live Tile background

CREATING WINDOWS PHONE 7 APPLICATION AND MARKETPLACE ICONS (製作App/Marketplace Icon)

Types of Push Notifications for Windows Phone (了解Tile)

 

Dotblogs 的標籤: , ,