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