Windows Phone 7 啟動器與選擇器
Android 允許應用程序通過Action、URI等機制調用系統內置功能,比如打電話、發郵箱、發短信等。
Windows Phone 7 也提供了類似的API提供開發人員使用,即啟動器與選擇器,但在Windows Phone 7 中他們是通過一套封裝完整的Task 提供的。
Windows Phone 應用程序模型將每個應用分離成各自獨立的沙箱,包括運行時和文件存儲。微軟提供的這套API只要正確的實施,啟動器和選擇器框架可以為最終用戶提供一個完 全無縫的體驗,他們完全感覺不到應用程序之間的切換。那么什么是啟動器?什么是選擇器?這個可以用Andriod 的一些小知識來理解。
啟動器 相當于Android 的Action提供一個動作,導向某個地方(功能,如發短信、打開網頁、打電話等)。
選擇器 相當于Android 的Uri 可以通過這個Uri 返回一串數據,在Windows Phone 7應用程序也是一樣,允許你從你手機中選擇一些數據比如聯系人的電話號碼、相冊中的一張圖片等。
以下是當前版本Windows Phone 7 支持的啟動器和選擇器的完整清單:
EmailComposeTask --允許應用程序啟動電子郵件應用程序并創建一條新消息;以此來讓用戶從應用程序發送電子郵件。
MarketplaceDetailTask -- 允許應用程序啟動Windows Phone Market 客戶端應用程序并顯示指定產品的詳細信息頁面。
MarketPlaceHubTask -- 允許應用程序啟動Windows Phone Market 的客戶端應用程序。
MarketPlaceReviewTask -- 允許應用程序啟動Windows Phone Market 客戶端應用程序并顯示指定產品的評論信息頁面。
MarketPlaceSearchTask -- 允許應用程序啟動Windows Phone Market 客戶端應用程序并顯示指定搜索條件的檢索結果。
----奶奶的,好多商啟的API,對這塊這么重視。。。
MediaPlayerLauncher --允許應用程序啟動媒體播放器。
PhoneCallTask --允許應用程序啟動電話應用程序;使得用戶能夠在應用程序中開始打電話。
SaveEmailAddressTask -- 允許應用程序啟動聯系人應用程序;以此允許用戶從應用程序中保存電子郵件地址到一個新的或現有的聯系人。
SavePhoneNumberTask --允許應用程序啟動聯系人應用程序 ;以此允許用戶從應用程序中保存電話號碼到一個新的或現有的聯系人。
SearchTask -- 允許應用程序啟動WEB 搜索應用程序。
SmsComposeTask -- 允許應用程序啟動Sms 應用程序。
WebBrowserTask -- 允許應用程序啟動Web 瀏覽器應用程序。
Tip :由于本版本SDK提供的啟動器和選擇器API還屬于Beta 版本,所以模擬器并不包括手機全部功能,故有些啟動器和選擇器的體驗不完整。
強調一下,所有使用啟動器和選擇器都必須引用此命名空間:Microsoft.Phone.Tasks;
本篇學習內容,將會使用5個選擇器和啟動器來練習,加深到選擇器和啟動器的了解,下面先看一下DEMO運行效果:
點擊保存聯系人電話按鈕,導航到:
輸入一個號碼,并保存,跳轉到保存界面上,在這里你可以新建一個聯系人或者保存到己經存在的聯系人里面:
保存成功后,點擊返回,我們應用程序接收到保存完成的Task 返回值,彈出提示對話框:
看看代碼如何編寫:
根據上面的命令清單,我們知道保存電話號碼來自SavePhoneNumberTask類,故我們可以利用它來完成這個功能:
public partial class SaveContactInfoPage : PhoneApplicationPage { private SavePhoneNumberTask savePhoneNumberTask; public SaveContactInfoPage() { InitializeComponent(); savePhoneNumberTask = new SavePhoneNumberTask(); //聲明一個監聽,監聽保存完成后的返回值 savePhoneNumberTask.Completed += new EventHandler(savePhoneNumberTask_Completed); } void savePhoneNumberTask_Completed(object sender, TaskEventArgs e) { if (e.TaskResult==TaskResult.OK) { MessageBox.Show("電話號碼保存成功","成功",MessageBoxButton.OK); } else { MessageBox.Show("你電話號碼:" + e.Error.Message + " 保存失敗", "失敗", MessageBoxButton.OK); } } //保存命令 private void btnSavePhone_Click(object sender, RoutedEventArgs e) { //正則表達式驗證,參數1要驗證的值,參數二要驗證的正則表達式,參數三處理類型 if (Regex.IsMatch(txtInput.Text,App.phoneNumberPattern,RegexOptions.IgnoreCase)) { if (null!=savePhoneNumberTask) { savePhoneNumberTask.PhoneNumber = txtInput.Text; savePhoneNumberTask.Show(); txtInput.Text = ""; } else { MessageBox.Show("你的電話號碼格式錯誤","驗證輸入",MessageBoxButton.OK); } } } }
同樣的道理,我就不一一截圖了,下面會提供源碼,有興趣的朋友可以嘗試一下。
執行搜索命令:
public partial class SearchPage : PhoneApplicationPage { public SearchPage() { InitializeComponent(); } ////// 搜索導航 /// /// /// private void btnSearch_Click(object sender, RoutedEventArgs e) { SearchTask searchTask = new SearchTask(); searchTask.SearchQuery = txtInput.Text; searchTask.Show(); } }
public partial class BrowserWebPage : PhoneApplicationPage { public BrowserWebPage() { InitializeComponent(); } private void btnGo_Click(object sender, RoutedEventArgs e) { if (Regex.IsMatch(txtInput.Text,App.urlPattern,RegexOptions.IgnoreCase)) { WebBrowserTask webBrowserTask = new WebBrowserTask(); webBrowserTask.URL = txtInput.Text; webBrowserTask.Show(); } else { MessageBox.Show("你輸入的地址有誤","錯誤",MessageBoxButton.OK); } } }
啟動媒體播放器代碼并播放代碼:
public partial class VideoPlayerPage : PhoneApplicationPage { public VideoPlayerPage() { InitializeComponent(); } ////// 該函數將使用MediaPlayerLauncher ,應用程序可以通過它來啟動媒體播放器 /// 播放視頻文件,如何用戶選中“外部視頻”復選框,它將播放一個基于WEB的視頻流 /// 否則就播放一個本地標志為“content”的視頻文件。 /// /// /// private void btnPlayVideo_Click(object sender, RoutedEventArgs e) { MediaPlayerLauncher mediaPlayerLauncher = new MediaPlayerLauncher(); if (chkUseExternalMedia.IsChecked.Value) { mediaPlayerLauncher.Media = new Uri("http://ecn.channel9.msdn.com/o9/ch9/4/1/9/7/4/5/WPMetroDesignOverivew_ch9.wmv",UriKind.Absolute); } else { mediaPlayerLauncher.Location = MediaLocationType.Install; mediaPlayerLauncher.Media = new Uri("Media/Bear.wmv",UriKind.Relative); } mediaPlayerLauncher.Show(); } }
注意,由于我使用的是模擬器,感覺播放視頻的時候一卡一卡的,不知道在真機的效果會不會這樣?
使用聯系人電話號碼發送短信代碼:
////// 感覺跟使用PhoneNumberTask差不多 /// public partial class UsePhoneNumberPage : PhoneApplicationPage { PhoneNumberChooserTask phoneNumberChooserTask; public UsePhoneNumberPage() { InitializeComponent(); phoneNumberChooserTask = new PhoneNumberChooserTask(); phoneNumberChooserTask.Completed += new EventHandler(phoneNumberChooserTask_Completed); } void phoneNumberChooserTask_Completed(object sender, PhoneNumberResult e) { if (e.TaskResult== TaskResult.OK) { SmsComposeTask smsComposeTask = new SmsComposeTask(); smsComposeTask.Body = "你好,這是Terry"; smsComposeTask.To = e.PhoneNumber; smsComposeTask.Show(); } else if (e.TaskResult==TaskResult.Cancel) { MessageBox.Show("不能發送短信","未選擇號碼",MessageBoxButton.OK); } else { MessageBox.Show("發送出錯"+e.Error.Message,"失敗",MessageBoxButton.OK); } } private void btnSendSMS_Click(object sender, RoutedEventArgs e) { phoneNumberChooserTask.Show(); }
本篇實例源碼: