不同凡響 windows phone (39) - 8.0 聯繫人和日曆

[源碼下載]


html

不同凡響 windows phone (39) - 8.0 聯繫人和日曆



做者:webabcd


介紹
不同凡響 windows phone 8.0 之 聯繫人和日曆html5

  • 自定義聯繫人存儲的增刪改查
  • 獲取 Windows Phone 的聯繫人數據
  • 獲取 Windows Phone 的日曆數據



示例
一、演示如何操做自定義聯繫人存儲(自定義聯繫人的增刪改查)
ContactsAndCalendar/CustomContacts.xamlweb

<phone:PhoneApplicationPage
    x:Class="Demo.ContactsAndCalendar.CustomContacts"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    FontFamily="{StaticResource PhoneFontFamilyNormal}"
    FontSize="{StaticResource PhoneFontSizeNormal}"
    Foreground="{StaticResource PhoneForegroundBrush}"
    SupportedOrientations="Portrait" Orientation="Portrait"
    mc:Ignorable="d"
    shell:SystemTray.IsVisible="True">
    
    <Grid Background="Transparent">
        <StackPanel Orientation="Vertical">

            <TextBlock x:Name="lblMsg" />

            <Button x:Name="btnAdd" Content="添加聯繫人" Click="btnAdd_Click" />

            <Button x:Name="btnUpdate" Content="更新聯繫人" Click="btnUpdate_Click" />

            <Button x:Name="btnDelete" Content="刪除聯繫人" Click="btnDelete_Click" />

            <Button x:Name="btnQuery" Content="查詢聯繫人" Click="btnQuery_Click" />

        </StackPanel>
    </Grid>
    
</phone:PhoneApplicationPage>

ContactsAndCalendar/CustomContacts.xaml.csshell

/*
 * 演示如何操做自定義聯繫人存儲(自定義聯繫人的增刪改查)
 * 
 * 
 * ContactStore - 自定義聯繫人存儲
 *     CreateOrOpenAsync(ContactStoreSystemAccessMode access, ContactStoreApplicationAccessMode sharing) - 建立或打開本 app 的自定義聯繫人存儲
 *         ContactStoreSystemAccessMode - 操做系統對本 app 的自定義聯繫人存儲的訪問模式
 *             ReadOnly - 只能讀
 *             ReadWrite - 除了讀外,還能夠修改
 *         ContactStoreApplicationAccessMode - 其餘 app 對本 app 的自定義聯繫人存儲的訪問模式
 *             LimitedReadOnly - 只能讀聯繫人的說明和顯示圖片
 *             ReadOnly - 能夠讀任何屬性
 *     FindContactByIdAsync(), FindContactByRemoteIdAsync - 根據 Id 或 RemoteId 查找指定的聯繫人,返回 StoredContact 類型的對象
 *     DeleteContactAsync(), DeleteAsync() - 根據 Id 刪除聯繫人,或者刪除所有聯繫人
 *     CreateContactQuery(ContactQueryOptions options) - 建立一個聯繫人查詢,返回 ContactQueryResult 類型的對象
 *         ContactQueryOptions - 查詢參數
 *             DesiredFields - 須要返回的屬性列表
 *             OrderBy - 排序字段(ContactQueryResultOrdering 枚舉)
 *                 SystemDefault - 默認排序
 *                 GivenNameFamilyName - 先按名排序,再按姓排序
 *                 FamilyNameGivenName - 先按姓排序,再按名排序
 *     RevisionNumber - ContactStore 的修訂號,只讀
 *     GetChangesAsync(ulong baseRevisionNumber) - 返回與指定修訂號關聯的每次更改的 ContactChangeRecord 對象
 *     LoadExtendedPropertiesAsync() - 獲取 ContactStore 的擴展屬性集合
 *     SaveExtendedPropertiesAsync() - 保存 ContactStore 的擴展屬性集合
 * 
 * StoredContact - 聯繫人對象
 *     FamilyName - 姓
 *     GivenName - 名
 *     HonorificPrefix - 前綴尊稱
 *     HonorificSuffix - 後綴尊稱
 *     DisplayName - 顯示名稱
 *     DisplayPicture - 顯示圖片
 *     Id - 聯繫人的本地標識(只讀)
 *     RemoteId - 聯繫人的遠程標識,應確保其在手機上的全部應用中都是惟一的
 *     Store - 對應的 ContactStore 對象
 *     KnownContactProperties() - 異步方式獲取顯示圖片
 *     SetDisplayPictureAsync() - 異步方式設置顯示圖片
 *     GetPropertiesAsync() - 獲取已知屬性(key 的值爲 Windows.Phone.PersonalInformation.KnownContactProperties 類中的字段)
 *     GetExtendedPropertiesAsync() - 獲取擴展屬性(key 的值任意)
 *     SaveAsync() - 保存當前聯繫人信息
 *     ReplaceExistingContactAsync(string id) - 使用當前聯繫人替換指定 Id 的聯繫人
 *     
 * ContactQueryResult - 聯繫人查詢結果對象
 *     GetContactsAsync() - 獲取所有聯繫人
 *     GetContactsAsync(uint startIndex, uint maxNumberOfItems) - 獲取指定範圍的聯繫人
 *     GetContactCountAsync() - 獲取當前查詢的聯繫人總數
 *     GetCurrentQueryOptions() - 獲取對應的 ContactQueryOptions,參見 CreateContactQuery(ContactQueryOptions options)
 * 
 * 
 * 注:
 * 一、須要在 mainfest 中增長 <Capability Name="ID_CAP_CONTACTS" />
 * 二、Id 表明聯繫人的本地標識(只讀)
 * 三、RemoteId 表明聯繫人的遠程標識,應確保其在手機上的全部應用中都是惟一的
 */

using System;
using System.Collections.Generic;
using System.Windows;
using Microsoft.Phone.Controls;
using Windows.Phone.PersonalInformation;

namespace Demo.ContactsAndCalendar
{
    public partial class CustomContacts : PhoneApplicationPage
    {
        private Random _random = new Random();

        public CustomContacts()
        {
            InitializeComponent();
        }

        // 添加聯繫人
        private async void btnAdd_Click(object sender, RoutedEventArgs e)
        {
            ContactStore contactStore = await ContactStore.CreateOrOpenAsync();

            StoredContact storedContact = new StoredContact(contactStore);

            storedContact.RemoteId = Guid.Empty.ToString();

            storedContact.GivenName = _random.Next(1000, 10000).ToString();
            storedContact.FamilyName = "wang";

            // 設置已知屬性
            IDictionary<string, object> props = await storedContact.GetPropertiesAsync();
            props.Add(KnownContactProperties.Email, "xxx@xxx.xxx");

            // 設置擴展屬性
            IDictionary<string, object> extprops = await storedContact.GetExtendedPropertiesAsync();
            extprops.Add("ext1", "ext1");

            // 保存當前聯繫人
            await storedContact.SaveAsync();
        }

        // 更新聯繫人
        private async void btnUpdate_Click(object sender, RoutedEventArgs e)
        {
            ContactStore contactStore = await ContactStore.CreateOrOpenAsync();

            string remoteId = Guid.Empty.ToString();
            StoredContact storedContact = await contactStore.FindContactByRemoteIdAsync(remoteId);

            if (storedContact != null)
            {
                storedContact.GivenName = _random.Next(1000, 10000).ToString();
                storedContact.FamilyName = "wang";

                // 設置已知屬性
                IDictionary<string, object> props = await storedContact.GetPropertiesAsync();
                props[KnownContactProperties.Email] = "xxx@xxx.xxx";

                // 設置擴展屬性
                IDictionary<string, object> extprops = await storedContact.GetExtendedPropertiesAsync();
                extprops["ext1"] = "ext1";

                // 保存當前聯繫人
                await storedContact.SaveAsync();
            }
        }

        // 刪除聯繫人
        private async void btnDelete_Click(object sender, RoutedEventArgs e)
        {
            ContactStore contactStore = await ContactStore.CreateOrOpenAsync();

            string remoteId = Guid.Empty.ToString();
            StoredContact storedContact = await contactStore.FindContactByRemoteIdAsync(remoteId);

            // 根據本地標識刪除聯繫人
            await contactStore.DeleteContactAsync(storedContact.Id);
        }

        // 查詢聯繫人
        private async void btnQuery_Click(object sender, RoutedEventArgs e)
        {
            ContactStore contactStore = await ContactStore.CreateOrOpenAsync();
            ContactQueryResult result = contactStore.CreateContactQuery();
            IReadOnlyList<StoredContact> storedContacts = await result.GetContactsAsync();

            lblMsg.Text = "本 app 的自定義聯繫人總數: " + storedContacts.Count.ToString();
        }      
    }
}


二、演示如何獲取 Windows Phone 的聯繫人數據
ContactsAndCalendar/AccessContacts.xamlexpress

<phone:PhoneApplicationPage
    x:Class="Demo.ContactsAndCalendar.AccessContacts"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    FontFamily="{StaticResource PhoneFontFamilyNormal}"
    FontSize="{StaticResource PhoneFontSizeNormal}"
    Foreground="{StaticResource PhoneForegroundBrush}"
    SupportedOrientations="Portrait" Orientation="Portrait"
    mc:Ignorable="d"
    shell:SystemTray.IsVisible="True">

    <Grid Background="Transparent">
        <StackPanel Orientation="Vertical">

            <TextBlock x:Name="lblMsg" />
            
            <Image Name="img" Width="100" Height="100" />
            <Image Name="img2" Width="100" Height="100" Margin="0 10 0 0" />
            
            <Button x:Name="btnGet" Content="獲取聯繫人數據" Click="btnGet_Click" />

        </StackPanel>
    </Grid>

</phone:PhoneApplicationPage>

ContactsAndCalendar/AccessContacts.xaml.cswindows

/*
 * 演示如何獲取 Windows Phone 的聯繫人數據
 * 
 * 
 * 注:
 * 一、須要在 mainfest 中增長 <Capability Name="ID_CAP_CONTACTS" />
 * 二、獲取聯繫人數據以前,應提供隱私策略並獲得用戶的容許。參見:http://msdn.microsoft.com/zh-cn/library/windowsphone/develop/hh184841(v=vs.105).aspx 的 2.11
 * 三、關於獲取聯繫人和日曆數據請參見:http://www.cnblogs.com/webabcd/archive/2012/08/29/2661418.html
 */

using System;
using System.Linq;
using System.Windows;
using Microsoft.Phone.Controls;
using Microsoft.Phone.UserData;
using System.Collections.Generic;
using System.Windows.Media.Imaging;

namespace Demo.ContactsAndCalendar
{
    public partial class AccessContacts : PhoneApplicationPage
    {
        public AccessContacts()
        {
            InitializeComponent();
        }

        private void btnGet_Click(object sender, RoutedEventArgs e)
        {
            // Contacts - 用於獲取聯繫人數據
            Contacts contacts = new Contacts();

            // Contacts.SearchCompleted - 當搜索聯繫人數據完成時所觸發的事件
            contacts.SearchCompleted += contacts_SearchCompleted;

            /*
             * Contacts.SearchAsync(string filter, FilterKind filterKind, object state) - 按指定參數搜索聯繫人
             *     string filter - 搜索關鍵字
             *     FilterKind filterKind - 搜索範圍
             *         None - 所有聯繫人
             *         PinnedToStart - 在固定到開始屏幕的聯繫人中搜索
             *         EmailAddress - 按電子郵件地址搜索
             *         PhoneNumber - 按電話號碼搜索
             *         DisplayName - 按顯示名稱搜索
             *         Identifier - 按本地標識搜索
             *     object state - 異步處理的上下文對象
             */
            contacts.SearchAsync(string.Empty, FilterKind.None, null);
        }

        void contacts_SearchCompleted(object sender, ContactsSearchEventArgs e)
        {
            /*
             * ContactsSearchEventArgs - 事件參數
             *     Filter, FilterKind, State - 對應 Contacts.SearchAsync() 方法中的參數
             *     Results - 搜索結果
             * 
             * Contact - 某個聯繫人的相關信息
             *     詳細說明見文檔,如下就部分屬性和方法作說明
             */
            IEnumerable<Contact> contacts = e.Results;

            lblMsg.Text = "聯繫人數量:" + contacts.Count().ToString();
            lblMsg.Text += Environment.NewLine;

            lblMsg.Text += "第一個聯繫人的所屬數據源數量:" + contacts.First().Accounts.Count();
            lblMsg.Text += Environment.NewLine;

            // StorageKind 枚舉:Phone, WindowsLive, Outlook, Facebook, Other(自定義聯繫人存儲屬於 Other)
            lblMsg.Text += "第一個聯繫人的所屬的第一個數據源:" + contacts.First().Accounts.First().Kind.ToString();
            lblMsg.Text += Environment.NewLine;

            lblMsg.Text += "第一個聯繫人的顯示名稱:" + contacts.First().DisplayName;
            lblMsg.Text += Environment.NewLine;

            // 第一個聯繫人的照片
            BitmapImage bitmapImage = new BitmapImage();
            bitmapImage.SetSource(contacts.First().GetPicture());
            img.Source = bitmapImage; // 第一種顯示 Stream 圖片的方法

            img2.Source = Microsoft.Phone.PictureDecoder.DecodeJpeg(contacts.First().GetPicture()); // 第二種顯示 Stream 圖片的方法
        }
    }
}


三、演示如何獲取 Windows Phone 的日曆數據
ContactsAndCalendar/AccessCalendar.xamlapp

<phone:PhoneApplicationPage
    x:Class="Demo.ContactsAndCalendar.AccessCalendar"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    FontFamily="{StaticResource PhoneFontFamilyNormal}"
    FontSize="{StaticResource PhoneFontSizeNormal}"
    Foreground="{StaticResource PhoneForegroundBrush}"
    SupportedOrientations="Portrait" Orientation="Portrait"
    mc:Ignorable="d"
    shell:SystemTray.IsVisible="True">

    <Grid Background="Transparent">
        <StackPanel Orientation="Vertical">

            <TextBlock x:Name="lblMsg" />

            <Button x:Name="btnGet" Content="獲取日曆數據" Click="btnGet_Click" />

        </StackPanel>
    </Grid>

</phone:PhoneApplicationPage>

ContactsAndCalendar/AccessCalendar.xaml.csasp.net

/*
 * 演示如何獲取 Windows Phone 的日曆數據
 * 
 * 
 * 注:
 * 一、須要在 mainfest 中增長 <Capability Name="ID_CAP_APPOINTMENTS" />
 * 二、獲取日曆數據以前,應提供隱私策略並獲得用戶的容許。參見:http://msdn.microsoft.com/zh-cn/library/windowsphone/develop/hh184841(v=vs.105).aspx 的 2.11
 * 三、關於獲取聯繫人和日曆數據請參見:http://www.cnblogs.com/webabcd/archive/2012/08/29/2661418.html
 */

using System;
using System.Linq;
using System.Windows;
using Microsoft.Phone.Controls;
using Microsoft.Phone.UserData;
using System.Collections.Generic;

namespace Demo.ContactsAndCalendar
{
    public partial class AccessCalendar : PhoneApplicationPage
    {
        public AccessCalendar()
        {
            InitializeComponent();
        }

        private void btnGet_Click(object sender, RoutedEventArgs e)
        {
            // Appointments - 用於獲取日曆數據
            Appointments appointments = new Appointments();

            // Appointments.SearchCompleted - 當搜索日曆數據完成時所觸發的事件
            appointments.SearchCompleted += appointments_SearchCompleted;

            DateTime start = DateTime.Now;
            DateTime end = start.AddDays(7);
            int max = 20;

            /*
             * Appointments.SearchAsync(DateTime startTimeInclusive, DateTime endTimeInclusive, int maximumItems, Account account, object state) - 按指定參數搜索日曆數據
             *     DateTime startTimeInclusive - 約會的開始時間
             *     DateTime endTimeInclusive - 約會的結束時間
             *     int maximumItems - 返回約會的最大數量
             *     Account account - 要搜索的約會的數據源
             *     object state - 異步處理的上下文對象
             */
            appointments.SearchAsync(start, end, max, "Appointments Test #1");
        }

        void appointments_SearchCompleted(object sender, AppointmentsSearchEventArgs e)
        {
            /*
             * AppointmentsSearchEventArgs - 事件參數
             *     StartTimeInclusive, EndTimeInclusive, State - 對應 Appointments.SearchAsync() 方法中的參數
             *     Results - 搜索結果
             * 
             * Appointment - 某個約會的相關信息
             *     詳細說明見文檔,如下就部分屬性和方法作說明
             */
            IEnumerable<Appointment> appointments = e.Results;

            lblMsg.Text = "獲取到的約會數量:" + appointments.Count().ToString();
            lblMsg.Text += Environment.NewLine;

            lblMsg.Text += "第一個約會所屬數據源的帳戶名稱:" + appointments.First().Account.Name;
            lblMsg.Text += Environment.NewLine;

            // StorageKind 枚舉:Phone, WindowsLive, Outlook, Facebook, Other
            lblMsg.Text += "第一個約會所屬數據源的種類:" + appointments.First().Account.Kind.ToString();
            lblMsg.Text += Environment.NewLine;

            lblMsg.Text += "第一個約會的主題:" + appointments.First().Subject;
            lblMsg.Text += Environment.NewLine;
        }
    }
}



OK
[源碼下載]dom

相關文章
相關標籤/搜索