文章目錄
- 2.鎖定螢幕背景
- 2.鎖定螢幕通知
- 3.從鎖定螢幕設定頁啟動應用
- 1.唯讀連絡人訪問
- 2.自訂連絡人儲存
本節整理了之前並沒有提到的Windows phone 8 系統相關整合支援,包括選取器、鎖定螢幕的、連絡人的訪問等。選取器列舉了若干內建應用程式提供的相關支援;鎖定螢幕展示了我們可以對鎖定螢幕提供背景映像,螢幕通知等功能;連絡人訪問示範了對連絡人的管理維護和唯讀訪問。
快速導航:
一、選取器
二、鎖定螢幕
三、連絡人訪問
一、選取器
選取器為手機內建應用程式對您的開發提供的相關支援,通過選取器你可以直接調用相機應用捕獲一張照片到你的應用,或者調用連絡人的相關資料,儲存鈴聲等操作。
下面列舉了大部分常用選取器:
1.地址選取器
2.相機拍照選取器
3.郵箱選取器
4.電話選取器
5.照片選取器
6.儲存連絡人選取器
7.儲存電子郵件地址選取器
8.儲存電話號碼選取器
9.儲存鈴聲選取器
下面代碼羅列了調用方法。
[C#]
//地址選取器 void showAddressChooserTask() { var addressChooserTask = new AddressChooserTask(); addressChooserTask.Completed += new EventHandler<AddressResult>((a, b) => { if (b.TaskResult == TaskResult.OK) { MessageBox.Show(b.DisplayName + "的地址是:" + b.Address); } }); addressChooserTask.Show(); } //相機拍照選取器 void showCameraCaptureTask() { var cameraCaptureTask = new CameraCaptureTask(); cameraCaptureTask.Completed += new EventHandler<PhotoResult>((a, b) => { if (b.TaskResult == TaskResult.OK) { Image image = new Image(); var bitmapImage = new BitmapImage(); bitmapImage.SetSource(b.ChosenPhoto); image.Source = bitmapImage; ContentPanel.Children.Add(image); MessageBox.Show(b.OriginalFileName); } }); cameraCaptureTask.Show(); } //郵箱選取器 void showEmailAddressChooserTask() { var emailAddressChooserTask = new EmailAddressChooserTask(); emailAddressChooserTask.Completed += new EventHandler<EmailResult>((a, b) => { if (b.TaskResult == TaskResult.OK) { MessageBox.Show(b.DisplayName + "的郵箱是:" + b.Email); } }); emailAddressChooserTask.Show(); } //電話選取器 void showPhoneNumberChooserTask() { var phoneNumberChooserTask = new PhoneNumberChooserTask(); phoneNumberChooserTask.Completed += new EventHandler<PhoneNumberResult>((a, b) => { if (b.TaskResult == TaskResult.OK) { MessageBox.Show(b.DisplayName + "的電話是:" + b.PhoneNumber); } }); phoneNumberChooserTask.Show(); } //照片選取器 void showPhotoChooserTask() { var photoChooserTask = new PhotoChooserTask(); photoChooserTask.Completed += new EventHandler<PhotoResult>((a, b) => { if (b.TaskResult == TaskResult.OK) { Image image = new Image(); var bitmapImage = new BitmapImage(); bitmapImage.SetSource(b.ChosenPhoto); image.Source = bitmapImage; ContentPanel.Children.Add(image); MessageBox.Show(b.OriginalFileName); } }); photoChooserTask.Show(); } //儲存連絡人選取器 void showSaveContactTask() { var saveContactTask = new SaveContactTask(); saveContactTask.Completed += new EventHandler<SaveContactResult>((a, b) => { switch (b.TaskResult) { case TaskResult.OK: MessageBox.Show("儲存成功。"); break; case TaskResult.Cancel: MessageBox.Show("取消儲存。"); break; case TaskResult.None: MessageBox.Show("儲存失敗。"); break; } }); //添加一些預設值 saveContactTask.FirstName = "三"; saveContactTask.LastName = "張"; saveContactTask.MobilePhone = "13900000000"; saveContactTask.Show(); } //儲存電子郵件地址選取器 void showSaveEmailAddressTask() { var saveEmailAddressTask = new SaveEmailAddressTask(); saveEmailAddressTask.Completed += new EventHandler<TaskEventArgs>((a, b) => { switch (b.TaskResult) { case TaskResult.OK: MessageBox.Show("儲存成功。"); break; case TaskResult.Cancel: MessageBox.Show("取消儲存。"); break; case TaskResult.None: MessageBox.Show("儲存失敗。"); break; } }); //添加預設值 saveEmailAddressTask.Email = "mail@163.com"; saveEmailAddressTask.Show(); } //儲存電話號碼選取器 void showSavePhoneNumberTask() { var savePhoneNumberTask = new SavePhoneNumberTask(); savePhoneNumberTask.Completed += new EventHandler<TaskEventArgs>((a, b) => { switch (b.TaskResult) { case TaskResult.OK: MessageBox.Show("儲存成功。"); break; case TaskResult.Cancel: MessageBox.Show("取消儲存。"); break; case TaskResult.None: MessageBox.Show("儲存失敗。"); break; } }); //添加預設值 savePhoneNumberTask.PhoneNumber = "13900000000"; savePhoneNumberTask.Show(); } //儲存鈴聲選取器 void showSaveRingtoneTask() { var saveRingtoneTask = new SaveRingtoneTask(); saveRingtoneTask.Completed += new EventHandler<TaskEventArgs>((a, b) => { switch (b.TaskResult) { case TaskResult.OK: MessageBox.Show("儲存成功。"); break; case TaskResult.Cancel: MessageBox.Show("取消儲存。"); break; case TaskResult.None: MessageBox.Show("儲存失敗。"); break; } }); //鈴聲檔案路徑 saveRingtoneTask.Source = new Uri("appdata:/煙花易冷.mp3"); //鈴聲在列表中的顯示名稱 saveRingtoneTask.DisplayName = "煙花易冷"; saveRingtoneTask.Show(); }
二、鎖定螢幕
在手機鎖定螢幕介面,我們的應用可以更新背景映像和添加螢幕通知。
2.鎖定螢幕背景
要使應用能夠更新鎖定螢幕背景映像,我們必須在應用程式資訊清單檔案中聲明。右鍵選擇開啟檔案,選擇XML文字編輯器開啟WMAppManifest.xml,在Tokens下添加擴充內容。
[XML]
<Extensions> <!--指示當前應用可以為鎖定螢幕提供背景映像--> <Extension ExtensionName="LockScreen_Background" ConsumerID="{111DFF24-AA15-4A96-8006-2BFF8122084F}" TaskID="_default" /> </Extensions>
下面看看如何更新手機鎖定螢幕背景為安裝資料夾下的1.jpg圖片。
[C#]
private async void SetLockImg() { try { //指示當前應用是否為鎖定螢幕提供者 var isProvider = Windows.Phone.System.UserProfile.LockScreenManager.IsProvidedByCurrentApplication; if (!isProvider) { //設定當前應用為鎖定螢幕提供者 var op = await Windows.Phone.System.UserProfile.LockScreenManager.RequestAccessAsync(); //應用是否已設定為鎖定螢幕提供者 isProvider = op == Windows.Phone.System.UserProfile.LockScreenRequestResult.Granted; } if (isProvider) { // 設定鎖定螢幕的背景映像 Windows.Phone.System.UserProfile.LockScreen.SetImageUri(new Uri("ms-appx:///1.jpg", UriKind.Absolute)); // 擷取鎖定螢幕的映像 var currentImage = Windows.Phone.System.UserProfile.LockScreen.GetImageUri(); System.Diagnostics.Debug.WriteLine("The new lock screen background image is set to {0}", currentImage.ToString()); } else { MessageBox.Show("不能提供鎖定螢幕背景 "); } } catch { } }
2.鎖定螢幕通知
應用可以設定通知資訊並展示到鎖定螢幕的通知區域,我們需要首先在應用程式資訊清單檔案中指定用於顯示徽標的png圖片檔案。我們右鍵選擇開啟檔案,選擇XML文字編輯器開啟WMAppManifest.xml,設定徽標為LockImage.png。修改Tokens標記的DeviceLockImageURI元素如下:
[XML]
<DeviceLockImageURI IsRelative="true" IsResource="false">LockImage.png</DeviceLockImageURI>
另外,我們還需要在資訊清單檔中聲明我們可以在鎖定螢幕中顯示通知。右鍵選擇開啟檔案,選擇XML文字編輯器開啟WMAppManifest.xml,在Tokens下添加擴充內容。
[XML]
<Extensions> <!--指示當前應用可以添加螢幕通知--> <Extension ExtensionName="LockScreen_Notification_IconCount" ConsumerID="{111DFF24-AA15-4A96-8006-2BFF8122084F}" TaskID="_default" /> <Extension ExtensionName="LockScreen_Notification_TextField" ConsumerID="{111DFF24-AA15-4A96-8006-2BFF8122084F}" TaskID="_default" /> </Extensions>
設定完成後,我們就可以在鎖定螢幕展示通知了,但具體的展示還需要使用者在系統設定的鎖定螢幕頁,添加我們的應用為鎖定螢幕通知提供者。全部設定好後,只要預設的表徵圖有通知的數值,這個時候鎖定工具提示就會展示。
3.從鎖定螢幕設定頁啟動應用
註冊為鎖定螢幕背景提供者後,我們的應用可以從鎖定螢幕設定頁啟動,預設開啟mainpage,我們需要處理啟動uri。
[C#]
//從系統鎖定螢幕設定頁面開啟時的處理 protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) { base.OnNavigatedTo(e); string lockscreenKey = "WallpaperSettings"; string lockscreenValue = "0"; bool lockscreenValueExists = NavigationContext.QueryString.TryGetValue(lockscreenKey, out lockscreenValue); if (lockscreenValueExists) { //這裡可以定義一個鎖定螢幕背景增強設定的頁面。 MessageBox.Show("從鎖定螢幕設定開啟。"); } }
三、連絡人訪問
手機內建的連絡人資料庫支援編程的方式去訪問。我們有兩種方式訪問,一種是唯讀訪問,還有一種是可以執行增刪改查操作。
1.唯讀連絡人訪問
下面示範了通過查詢返回唯讀連絡人清單。
[C#]
//連絡人資料 private void Button_Click_1(object sender, RoutedEventArgs e) { Contacts cons = new Contacts(); cons.SearchCompleted += new EventHandler<ContactsSearchEventArgs>(Contacts_SearchCompleted); //參數1: 關鍵字;參數2:過濾類型,包含顯示名稱、電話號碼、郵件地址、是否固定到開始畫面等 cons.SearchAsync("139", FilterKind.PhoneNumber, "狀態"); } void Contacts_SearchCompleted(object sender, ContactsSearchEventArgs e) { //擷取到的連絡人的集合 listbox1.ItemsSource = e.Results; }
2.自訂連絡人儲存
通過這種方式我們可以對系統連絡人清單做各類增刪改查操作,我們將示範如何操作。
[XAML]
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> <ListBox x:Name="listbox1" Margin="0,10,10,173"> <ListBox.ItemTemplate> <DataTemplate> <StackPanel Orientation="Horizontal"> <TextBlock Text="{Binding Id}"></TextBlock> <TextBlock Text=" "></TextBlock> <TextBlock Text="{Binding FamilyName}"></TextBlock> <TextBlock Text="{Binding GivenName}"></TextBlock> </StackPanel> </DataTemplate> </ListBox.ItemTemplate> </ListBox> <Button Content="新增" HorizontalAlignment="Left" Margin="10,603,0,0" VerticalAlignment="Top" Click="Button_Click_1"/> <Button Content="修改" Margin="106,603,251,21" Click="Button_Click_2"/> <Button Content="刪除" HorizontalAlignment="Left" Margin="205,603,0,0" VerticalAlignment="Top" Click="Button_Click_3"/> <TextBlock x:Name="textblock1" HorizontalAlignment="Left" Margin="24,556,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top"/> <Button Content="查看手機號" HorizontalAlignment="Left" Margin="291,603,0,0" VerticalAlignment="Top" Click="Button_Click_4"/> <Button Content="唯讀連絡人訪問〉" HorizontalAlignment="Left" Margin="224,533,0,0" VerticalAlignment="Top" Width="232" Click="Button_Click_5"/> </Grid>
[C#]
public partial class MainPage : PhoneApplicationPage { // 建構函式 public MainPage() { InitializeComponent(); Query(); } //新增連絡人 async Task Add(string familyName, string givenName) { ContactStore store = await ContactStore.CreateOrOpenAsync(); StoredContact contact = new StoredContact(store); contact.FamilyName = familyName; contact.GivenName = givenName; //擷取已知連絡人屬性 IDictionary<string, object> props = await contact.GetPropertiesAsync(); props.Add(KnownContactProperties.Telephone, "18600000000"); //擷取擴充的連絡人屬性 IDictionary<string, object> extprops = await contact.GetExtendedPropertiesAsync(); extprops.Add("擴充", "擴充屬性"); await contact.SaveAsync(); } //查詢連絡人,並綁定到列表 async void Query() { ContactStore store = await ContactStore.CreateOrOpenAsync(); ContactQueryResult result = store.CreateContactQuery(); IReadOnlyList<StoredContact> contacts = await result.GetContactsAsync(); listbox1.ItemsSource = contacts; } //查詢已知屬性 async void GetPropertie(StoredContact contact) { IDictionary<string, object> props = await contact.GetPropertiesAsync(); if (props.Keys.Contains(KnownContactProperties.Telephone)) { MessageBox.Show("手機:" + props[KnownContactProperties.Telephone].ToString()); } } //更新連絡人 async Task Update(string Id) { try { ContactStore store = await ContactStore.CreateOrOpenAsync(); var contact = await store.FindContactByIdAsync(Id); if (contact != null) { contact.FamilyName = "趙"; contact.GivenName = "六"; await contact.SaveAsync(); } } catch (Exception e) { textblock1.Text = e.Message; } } //刪除連絡人 async private Task Delete(string Id) { try { ContactStore store = await ContactStore.CreateOrOpenAsync(); await store.DeleteContactAsync(Id); } catch (Exception e) { textblock1.Text = e.Message; } } //新增 private async void Button_Click_1(object sender, RoutedEventArgs e) { string[] familyNames = new string[] { "趙", "錢", "孫", "李", "周" }; string[] givenNames = new string[] {"雲","權","飛燕","白","公瑾" }; Random r = new Random(); await Add(familyNames[r.Next(0, familyNames.Length)], givenNames[r.Next(0, givenNames.Length)]); Query(); } //修改 private async void Button_Click_2(object sender, RoutedEventArgs e) { var contact= listbox1.SelectedValue as StoredContact; if (contact == null) return; await Update(contact.Id); Query(); } //刪除 private async void Button_Click_3(object sender, RoutedEventArgs e) { var contact = listbox1.SelectedValue as StoredContact; if (contact == null) return; await Delete(contact.Id); Query(); } //查看手機號 private void Button_Click_4(object sender, RoutedEventArgs e) { var contact = listbox1.SelectedValue as StoredContact; if (contact == null) return; GetPropertie(contact); } private void Button_Click_5(object sender, RoutedEventArgs e) { NavigationService.Navigate(new Uri("/Page1.xaml", UriKind.Relative)); } }
作者:李盼(Lipan)
出處:[Lipan] (http://www.cnblogs.com/lipan/)
著作權聲明:本文的著作權歸作者與部落格園共有。轉載時須註明本文的詳細連結,否則作者將保留追究其法律責任。 《上一篇:Windows phone 8 學習筆記 定位地圖導航
系列目錄
下一篇:沒有了》