Windows phone 8 學習筆記(9) 整合

來源:互聯網
上載者:User
文章目錄
  • 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 學習筆記 定位地圖導航
系列目錄
下一篇:沒有了》
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.