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
‧Microsoft.Phone.Tasks Namespace
‧Windows Phone 7 - Selecting device photos without PhotoChooserTask
‧Launchers and Choosers for Windows Phone