WP7 - 重要的操作 Microsoft.Phone.Tasks

Windows Phone 7-重要的操作-Microsoft.Phone.Tasks

從Windows Mobile走向Windows Phone 7之後,有蠻多的NameSpace重新被定義了,

此篇要介紹的是一個之後在開發WP7中會常用到的部分,Microsoft.Phone.Task。

它提供了大部分操作WP需要的功能,包括:存取Contact資料、Email、SMS、Marketplace等,

將透過下列的表來說明該Namespace主要提供的功能:

Class Description
CameraCaptureTask 允許應用程式控制Camera application,進行拍攝或擷取拍下的圖片。
EmailAddressChooserTask 應用程式可直接操作Contact applciation,搜尋指定的User或Email Address。該類別的執行結果,會引發ChooseBase<TTaskEventArgs>的事件。而Arg變數型態為:EmailResult。
EmailResult 用於呈現EmailAddressChooseTask執行Show()之後的結果。
EmailComposeTask 應用程式控件Email application撰寫New message,讓應用程式具有發送mail的能力。<註>如果要使用該類別,在WP7模擬器上要先設定好account才有辦法使用。
SavePhoneNumberTask 允許應用程式執行Contact application去儲存電話號碼至新的連絡人或既有的連絡人。
SaveEmailAddressTask 同SavePhoneNumberTask的功能,直接啟動Contact application詢問用戶將Mail儲存新的連絡人或既有連絡人。
PhoneCallTask 允許應用程式執行Phone application直接播放打電話。
SmsComposeTask 允許應用程式執行Messaging application,會以新訊息的顯示進行編輯畫面。
PhoneNumberChooserTask 應用程式執行Contact application,提供用戶選擇需要的號碼。
PhoneNumberResult 呈現PhoneNumberChooserTask的選擇結果。
PhotoChooserTask 應用程式執行Photo Chooser application。
PhotoResult 呈現PhotoChooserTask的選擇結果。
SearchTask 允許應用程式執行Web Serach Application,預設Bind。
WebBrowserTask 應用程式直接呼叫Browser application啟動,預設IEMobile。<註>與WebBrowser不同,WebBrowser是嵌入Browser畫面至應用程式中,而WebBrowserTask會直接啟動Browser Application,跳出應用程式。
MarketplaceDetailTask 應用程式執行WP中的Marketplace程式,並呈現指定商品的詳細資訊。提供設定ContentType、ContentIdentifier來指定產品內容的呈現。
MarketplaceHubTask 應用程式執行WP中的Marketplace程式。提供設定ContenType,讓程式啟動執行直接進入指定的內容。
MarketplaceReivewTask 應用程式執行WP中的Marketplace程式,呈現指定商品的預覽畫面。
MarketplaceSearchTask 允許應用程式執行WP中的Marketplace程式,呈現指定搜尋關鍵字的結果。提供:ContentType、SearchTerms。
MarketplaceLauncher 已不支援,改用MarketplaceHubTask、MarketplaceDetailTask、MarketplaceReviewTask、MarketplaceSearchTask。
MediaPlayerLauncher 應用程式啟動Media player applicaton。提供設定:Media、Controls、Location屬性,分別控件播放檔案的來源可以是Uri、File或設定flags來控件播放。
ChooserBase<TTaskEventArgs> 該類別被所有Chooser來驅動,它呈現Chooser與事件處理的結果。配合TaskEventArgs一起使用。
TaskEventArgs 該EventArgs被使用於Complete事件中,協助完成每一個Choosers類別的事件。

實際類別的用法,我已經把它們撰寫成一個簡單的範例程式,可以透過下方的連結來取得。

 

[比較過去Windows Mobile時代]

過去在控件Contact、Mail、SMS等Application,它們是統一被放置於Microsoft.WindowsMobile.Telephony.dll

與Microsoft.WindowsMobile.PocketOutlook、Camera(Microsoft.WindowsMobile.Forms)等,透過分層的概念,

讓不同版本的Windows Mobile都可以使用。並且,也提供讓您透過客製的應用程式,直接可以執行相似於

Windows Mobile中內鍵的動作,包括:擷取簡訊、發送Email、執行播打電話等,在這Windows Mobile時代

下的Application感覺獲得的控件權限是比較大的。另外,即便你的應用程式跑到一步,有其他程式忽然被啟動

(例如:電話來了、收到簡訊或呼叫其他程式),其實你的主程式還不會被關閉,它只是暫時被其他Application

的Process所搶先了,就如同我們的Windows操作一樣。

 

現在WP7的做法比較偏向於統一集中管理的方式,因為我們都知道WP 7不支援第三方程式於背景模式下執行,

因此,同一時間只會有一個Application在執行,其他的Process都是被會終止的。

上述介紹的類別,透過客製的應用程式來呼叫WP7內建的Application進行運作時,該客製程式的Process

會在Thread轉出到WP7後,就被停止了,而該程式會被轉換成一種"tombstoned",該tombstoned儲存了目前客

製程式被關閉前的狀態,等到WP 7程式完成(或其他程式完成或按下Back鍵)回到原客製程式的時候,該狀態會被

回存在繼續執行未完成的Event或流程,而剛呼叫的WP7 Application則會被終止。這樣一來,就可以保持同時只有

一個Process在運作。例如,上述提及某些類別中的Complete的事件時(例如:PhoneNumberChooserTask),

他們的運作原理也是如此。

 

因此,建議如果在程式中使用上述介紹的幾個Chooser類別時,把該類別的初始化與註冊Complete事件都在

MainPage()時註冊完成。因為Chooser類別如果在執行時才註冊時,會出現你Show()的結果不會馬上回到客

製Application的Thread中,需要重新執行該客製Application才有辦法完成Complete事件。

 

雖然說Windows.Phone.Tasks目前也算是Beta的版本,也許未來也會提供類似過去Windows Mobile提供那強大

的能力,但WP7在Thread控制上的改變,也可能會影響我們在實作呼叫其他程式運行時,必需要好好的思考。

因為在發表此篇時,我有測試上述介紹的類別,發現當我從客製Application呼叫WP7 Application時,我在客

製程式裡所輸入的內容或是顯示的狀態都會消失,這是因為我的程式Process被終止了。而狀態的內容都被放

進了"tombstoned",所以需要再將其內容倒回原來的程式中,才能繼續往下執行。

也許這個部分在研究WP7 Thread控制時,或許會需要之前提過的Isolated Storage中的Local Settings來暫時

目前的狀態與執行結果。

 

以上是自己最近看一些相關WP7設計實例與Library的想法,如果有錯誤或誤解的地方,也請大家多多指教。

謝謝。

 

[備註]

‧CameraCaptureTask:

目前測試結果還是有些問題,因為它不是真的模擬Camera,測試時顯示卡比較弱的話,畫面會不斷地閃動。

‧Marketplace系列的類別:

目前測試下來,直接透過MarketplaceHubTask啟動Markplace需要透過解鎖版的WP7模擬器才有辦法執行。

 

 

References:

‧CODING4FUN – Implement a Camera Proxy for WP7 Emulator

‧一起學習Windows Phone 7

‧Microsoft.Phone.Tasks Namespace

‧Chooser and Task Beta SDK

‧Windows Phone 7 - Selecting device photos without PhotoChooserTask

‧Launchers and Choosers for Windows Phone