西西軟件下載最安全的下載網(wǎng)站、值得信賴的軟件下載站!

首頁編程開發(fā)其它知識 → Windows Phone 8程序聯(lián)系人存儲開發(fā)實例代碼

Windows Phone 8程序聯(lián)系人存儲開發(fā)實例代碼

相關(guān)軟件相關(guān)文章發(fā)表評論 來源:西西整理時間:2013/1/12 20:25:18字體大。A-A+

作者:西西點擊:0次評論:1次標簽: WindowsPhone8

  • 類型:手機工具大。5.6M語言:英文 評分:2.0
  • 標簽:
立即下載

程序聯(lián)系人存儲是第三方的應(yīng)用程序創(chuàng)建的聯(lián)系人數(shù)據(jù),這些聯(lián)系人的數(shù)據(jù)也可以在手機的通訊錄里面進行顯示,但是它們是由創(chuàng)建這些聯(lián)系人數(shù)據(jù)的第三方應(yīng)用程序所管理的。聯(lián)系人數(shù)據(jù)的歸屬應(yīng)用程序可以設(shè)置這些聯(lián)系人數(shù)據(jù)的系統(tǒng)和其他程序的訪問權(quán)限,對屬于它自己的聯(lián)系人具有增刪改的權(quán)限,并且一旦用戶卸載了聯(lián)系人數(shù)據(jù)歸屬應(yīng)用程序,這些聯(lián)系人也會被刪除掉。程序聯(lián)系人存儲的API在空間Windows.Phone.PersonalInformation下,下面來看一下如何去使用這些API來操作聯(lián)系人。

ContactStore類和StoredContact類

ContactStore類表示一個Windows Phone應(yīng)用程序的自定義聯(lián)系人存儲,它是應(yīng)用程序存儲的一個管理者,負責管理應(yīng)用程序所創(chuàng)建的聯(lián)系人。ContactStore類的主要成員如表15.9所示。StoredContact類表示一個應(yīng)用程序自定義的聯(lián)系人存儲,它繼承了IContactInformation接口,所有由應(yīng)用程序創(chuàng)建的聯(lián)系人都是一個StoredContact類的對象。StoredContact類的主要成員如表15.10所示。

表15.9 ContactStore類的主要成員

成員說明
public ulong RevisionNumber { get; }聯(lián)系人存儲的版本號
public ContactQueryResult CreateContactQuery()創(chuàng)建一個默認的聯(lián)系人查詢,返回ContactQueryResult對象,包含了存儲中的聯(lián)系人
public ContactQueryResult CreateContactQuery(ContactQueryOptions options)創(chuàng)建一個自定義的聯(lián)系人查詢,返回ContactQueryResult對象,包含了存儲中的聯(lián)系人
public static IAsyncOperation<ContactStore> CreateOrOpenAsync()異步方法創(chuàng)建或者打開應(yīng)用程序的自定義聯(lián)系人存儲,假如存儲不存在將創(chuàng)建一個存儲
public static IAsyncOperation<ContactStore> CreateOrOpenAsync(ContactStoreSystemAccessMode access, ContactStoreApplicationAccessMode sharing)異步方法創(chuàng)建或者打開應(yīng)用程序的自定義聯(lián)系人存儲,假如存儲不存在將創(chuàng)建一個存儲,返回當前的聯(lián)系人存儲對象
access:聯(lián)系人是否可以在手機系統(tǒng)通訊錄里面進行編輯還是只能在應(yīng)用程序中創(chuàng)建
sharing:是否存儲的聯(lián)系人所有屬性都可以在另外的應(yīng)用程序里面進行訪問
public IAsyncAction DeleteAsync()異步方法刪除應(yīng)用程序的聯(lián)系人存儲
public IAsyncAction DeleteContactAsync(string id)異步方法通過聯(lián)系人的ID刪除應(yīng)用程序里面存儲的聯(lián)系人
public IAsyncOperation<StoredContact> FindContactByIdAsync(string id)異步方法通過ID查找應(yīng)用程序的聯(lián)系人,返回StoredContact對象
public IAsyncOperation<StoredContact> FindContactByRemoteIdAsync(string id)異步方法通過remote ID查找應(yīng)用程序的聯(lián)系人,返回StoredContact對象
public IAsyncOperation<IReadOnlyList<ContactChangeRecord>> GetChangesAsync(ulong baseREvisionNumber)異步方法通過聯(lián)系人的版本號獲取聯(lián)系人改動記錄
public IAsyncOperation<IDictionary<string, object>> LoadExtendedPropertiesAsync()異步方法加載應(yīng)用程序聯(lián)系人的擴展屬性Map表
public IAsyncAction SaveExtendedPropertiesAsync(IReadOnlyDictionary<string, object> data)異步方法保存應(yīng)用程序聯(lián)系人的擴展屬性Map表

表15.10 StoredContact類的主要成員

成員說明
public StoredContact(ContactStore store)通過當前應(yīng)用程序的ContactStore來初始化一個StoredContact對象
public StoredContact(ContactStore store, ContactInformation contact)通過ContactStore對象和ContactInformation對象來創(chuàng)建一個StoredContact對象,StoredContact對象的信息由ContactInformation對象來提供
public string DisplayName { get; set; }獲取或設(shè)置一個存儲聯(lián)系人的顯示名稱
public IRandomAccessStreamReference DisplayPicture { get; }獲取一個存儲聯(lián)系人的圖片
public string FamilyName { get; set; }獲取或設(shè)置一個存儲聯(lián)系人的家庭姓
public string GivenName { get; set; }獲取或設(shè)置一個存儲聯(lián)系人的名字
public string HonorificPrefix { get; set; }獲取或設(shè)置一個存儲聯(lián)系人的尊稱前綴
public string HonorificSuffix { get; set; }獲取或設(shè)置一個存儲聯(lián)系人的尊稱后綴
public string Id { get; }獲取應(yīng)用程序存儲聯(lián)系人的ID
public string RemoteId { get; set; }獲取或設(shè)置應(yīng)用程序聯(lián)系人的RemoteId
public ContactStore Store { get; }獲取當前應(yīng)用程序聯(lián)系人所在的聯(lián)系存儲對象
public IAsyncOperation<IRandomAccessStream> GetDisplayPictureAsync()獲取一個存儲聯(lián)系人的圖片
public IAsyncOperation<System.Collections.Generic.IDictionary<string, object>> GetExtendedPropertiesAsync()異步方法獲取聯(lián)系人的擴展屬性Map表
public IAsyncOperation<System.Collections.Generic.IDictionary<string, object>> GetPropertiesAsync()異步方法獲取聯(lián)系人的已知屬性Map表
public IAsyncAction ReplaceExistingContactAsync(string id)異步方法使用當前的聯(lián)系兒人來替換聯(lián)系人存儲中某個ID的聯(lián)系人
public IAsyncAction SaveAsync()異步方法保存當前的聯(lián)系人到聯(lián)系人存儲中
public IAsyncAction SetDisplayPictureAsync(IInputStream stream)異步方法保存當前的聯(lián)系人的圖片
public IAsyncOperation<IRandomAccessStream> ToVcardAsync()異步方法把當前的聯(lián)系人轉(zhuǎn)化為VCard信息流

15.3.2 程序聯(lián)系人的新增

新增程序聯(lián)系人需要先創(chuàng)建或者打開程序的聯(lián)系人存儲ContactStore,并且可以設(shè)置該程序聯(lián)系人存儲的被訪問權(quán)限。創(chuàng)建的代碼如下:

ContactStore conStore = await ContactStore.CreateOrOpenAsync();

聯(lián)系人存儲對于系統(tǒng)通訊和其他程序的都有權(quán)限的限制,ContactStoreSystemAccessMode枚舉表示手機系統(tǒng)通訊錄對應(yīng)用程序聯(lián)系人的訪問權(quán)限,有ReadOnly只讀權(quán)限和ReadWrite讀寫兩個權(quán)限,ContactStoreApplicationAccessMode枚舉表示第三方應(yīng)用程序?qū)?yīng)用程序聯(lián)系人的訪問權(quán)限類型,有LimitedReadOnly限制只讀權(quán)限和ReadOnly只讀權(quán)限。上面的代碼創(chuàng)建聯(lián)系人存儲的代碼是默認用了最低的訪問權(quán)限來來創(chuàng)建聯(lián)系人存儲,即聯(lián)系人對于系統(tǒng)通訊錄是只讀的權(quán)限,對于其他程序的訪問權(quán)限是限制只讀權(quán)限。下面來看一下自定義權(quán)限的創(chuàng)建聯(lián)系人存儲。

//創(chuàng)建一個系統(tǒng)通訊可以讀寫和其他程序只讀的聯(lián)系人存儲

ContactStore conStore = await ContactStore.CreateOrOpenAsync(ContactStoreSystemAccessMode.ReadWrite, ContactStoreApplicationAccessMode.ReadOnly);

接下來看一下如何創(chuàng)建一個聯(lián)系人:

1.第一種方式直接通過聯(lián)系人存儲創(chuàng)建聯(lián)系人

//創(chuàng)建或者打開聯(lián)系人存儲

ContactStore conStore = await ContactStore.CreateOrOpenAsync();

//保存聯(lián)系人

StoredContact storedContact = new StoredContact(conStore);

// 設(shè)置聯(lián)系人的展示名稱

storedContact.DisplayName = "展示名稱";

//保存聯(lián)系人

await storedContact.SaveAsync();

2.第二種方式通過ContactInformation類對象創(chuàng)建聯(lián)系人

ContactInformation類表示一個非系統(tǒng)存儲中聯(lián)系人的聯(lián)系人信息。ContactInformation類的主要成員如表15.11所示。

//創(chuàng)建一個ContactInformation類

ContactInformation conInfo = new ContactInformation();

// 獲取ContactInformation類的屬性map表

var properties = await conInfo.GetPropertiesAsync();

//添加電話屬性

properties.Add(KnownContactProperties.Telephone, "123456");

//添加名字屬性

properties.Add(KnownContactProperties.GivenName, "名字");

//創(chuàng)建或者打開聯(lián)系人存儲

ContactStore conStore = await ContactStore.CreateOrOpenAsync();

//保存聯(lián)系人

StoredContact storedContact = new StoredContact(conStore, conInfo);

//保存聯(lián)系人

await storedContact.SaveAsync();

表15.11 ContactInformation類主要成員

成員說明
ContactInformation()初始化
string DisplayName聯(lián)系人的顯示名字
IRandomAccessStreamReference DisplayPicture聯(lián)系人圖片信息
string FamilyName聯(lián)系人姓
string GivenName名字
string HonorificPrefix尊稱前綴
string HonorificSuffix尊稱后綴
IAsyncOperation<IRandomAccessStream> GetDisplayPictureAsync()異步獲取聯(lián)系人圖片
IAsyncOperation<System.Collections.Generic.IDictionary <string, object>> GetPropertiesAsync()異步獲取聯(lián)系人的Map表信息
IAsyncOperation<ContactInformation> ParseVcardAsync(IInputStream vcard)異步解析一個VCard數(shù)據(jù)流為ContactInformation對象
IAsyncAction SetDisplayPictureAsync(IInputStream stream)異步設(shè)置聯(lián)系人的圖片通過圖片數(shù)據(jù)流
IAsyncOperation<IRandomAccessStream> ToVcardAsync()異步轉(zhuǎn)換ContactInformation對象為一個VCard信息流

程序聯(lián)系人的查詢

聯(lián)系人查詢也需要創(chuàng)建聯(lián)系人存儲,創(chuàng)建聯(lián)系人存儲的形式和聯(lián)系人新增是一樣的。聯(lián)系人查詢是通過ContactStore的CreateContactQuery方法來創(chuàng)建一個查詢,可以查詢的參數(shù)ContactQueryOptions來設(shè)置查詢返回的結(jié)果和排序的規(guī)則,創(chuàng)建的查詢時ContactQueryResult類型?梢酝ㄟ^ContactQueryResult類的GetContactsAsync異步方法獲取聯(lián)系人存儲中的聯(lián)系人列表和通過GetCurrentQueryOptions方法獲取當前的查詢條件。下面來看創(chuàng)建聯(lián)系人查詢的代碼如下:

conStore = await ContactStore.CreateOrOpenAsync();

ContactQueryResult conQueryResult = conStore.CreateContactQuery();

uint count = await conQueryResult.GetContactCountAsync();

IReadOnlyList<StoredContact> conList = await conQueryResult.GetContactsAsync();

程序聯(lián)系人的編輯

聯(lián)系人編輯刪除也需要創(chuàng)建聯(lián)系人存儲,創(chuàng)建聯(lián)系人存儲的形式和聯(lián)系人新增是一樣的。聯(lián)系人的編輯需要首先要獲取要編輯的聯(lián)系人,獲取編輯的聯(lián)系人可以通過聯(lián)系人的id或者remoteid來獲取,獲取到的聯(lián)系人是一個StoredContact對象,通過修改該對象的屬性,然后再調(diào)用SaveAsync保存方法就可以實現(xiàn)編輯聯(lián)系人了。刪除聯(lián)系人的可以分為刪除一個聯(lián)系人和刪除所有的聯(lián)系人,刪除一個聯(lián)系人的可以通過聯(lián)系人的id然后調(diào)用ContactStore的DeleteContactAsync方法來進行刪除,如果要刪除所有的聯(lián)系人那么就要調(diào)用ContactStore的DeleteAsync方法。聯(lián)系人的新增,編輯和刪除都會有相關(guān)的操作記錄,GetChangesAsync方法來獲取聯(lián)系人的修改記錄。下面來看一下修改一個聯(lián)系人的代碼:

ContactStore conStore = await ContactStore.CreateOrOpenAsync();

StoredContact storCon = await conStore.FindContactByIdAsync(id);

var properties = await storCon.GetPropertiesAsync();

properties[KnownContactProperties.Telephone] = "12345678";

await storCon.SaveAsync();

程序聯(lián)系人的刪除

刪除聯(lián)系人的可以分為刪除一個聯(lián)系人和刪除所有的聯(lián)系人,刪除一個聯(lián)系人的可以通過聯(lián)系人的id然后調(diào)用ContactStore的DeleteContactAsync方法來進行刪除,如果要刪除所有的聯(lián)系人那么就要調(diào)用ContactStore的DeleteAsync方法。聯(lián)系人的新增,編輯和刪除都會有相關(guān)的操作記錄,GetChangesAsync方法來獲取聯(lián)系人的修改記錄。下面來看一下刪除一個聯(lián)系人的代碼:

ContactStore conStore = await ContactStore.CreateOrOpenAsync();

await conStore.DeleteContactAsync (id);

await conStore.DeleteAsync ();

實例演示聯(lián)系人存儲的使用

下面給出查詢?nèi)粘贪才诺氖纠翰樵兪謾C里面所有的日程安排信息。
代碼清單15-3:聯(lián)系人存儲的增刪改(源代碼:第15章\Examples_15_3)

MainPage.xaml文件主要代碼:聯(lián)系人新增頁面

        <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">            <StackPanel>                <TextBlock HorizontalAlignment="Left" Text="名字" FontSize="30"/>                <TextBox HorizontalAlignment="Left" x:Name="name"  Height="85"  Text=""  Width="296"/>                <TextBlock HorizontalAlignment="Left"  Text="電話" FontSize="30" />                <TextBox HorizontalAlignment="Left" x:Name="phone"  Height="85"  Text=""  Width="296"/>                <Button Content="保存" HorizontalAlignment="Left" Width="308" Height="91" Click="Button_Click_1"/>                <Button Content="查詢應(yīng)用存儲的聯(lián)系人" HorizontalAlignment="Left" Width="308" Height="91" Click="Button_Click_2"/>            </StackPanel>        </Grid>

MainPage.xaml.cs文件主要代碼

        // 新增一個聯(lián)系人        private async void Button_Click_1(object sender, RoutedEventArgs e)        {            if (name.Text != "" && phone.Text != "")            {                try                {                    // 創(chuàng)建一個聯(lián)系人的信息對象                    ContactInformation conInfo = new ContactInformation();                    // 獲取聯(lián)系人的屬性字典                    var properties = await conInfo.GetPropertiesAsync();                    // 添加聯(lián)系人的屬性                    properties.Add(KnownContactProperties.Telephone, phone.Text);                    properties.Add(KnownContactProperties.GivenName, name.Text);                    // 創(chuàng)建或者打開聯(lián)系人存儲                    ContactStore conStore = await ContactStore.CreateOrOpenAsync();                    StoredContact storedContact = new StoredContact(conStore, conInfo);                    // 保存聯(lián)系人                    await storedContact.SaveAsync();                    MessageBox.Show("保存成功");                }                catch (Exception ex)                {                    MessageBox.Show("保存失敗,錯誤信息:" + ex.Message);                }            }            else            {                MessageBox.Show("名字或電話不能為空");            }        }        // 跳轉(zhuǎn)到聯(lián)系人列表頁面        private void Button_Click_2(object sender, RoutedEventArgs e)        {            NavigationService.Navigate(new Uri("/ContactsList.xaml", UriKind.Relative));        }

ContactsList.xaml文件主要代碼:聯(lián)系人列表頁面

        <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">          <StackPanel>              <ListBox x:Name="conListBox"  ItemsSource="{Binding}" >                <ListBox.ItemTemplate >                  <DataTemplate>                    <StackPanel>                      <TextBlock  Text="{Binding Name}" />                      <TextBlock  Text="{Binding Id}" />                      <TextBlock  Text="{Binding Phone}" />                      <Button Content="刪除" HorizontalAlignment="Left" Width="308" Height="91" Click="Button_Click_1"/>                      <Button Content="編輯" HorizontalAlignment="Left" Width="308" Height="91" Click="Button_Click_2"/>                      <TextBlock  Text="————————————————————————" />                    </StackPanel>                  </DataTemplate>                </ListBox.ItemTemplate>              </ListBox>            </StackPanel>        </Grid>

ContactsList.xaml.cs文件主要代碼

private ContactStore conStore;//聯(lián)系人存儲        public ContactsList()        {            InitializeComponent();        }        // 進入頁面事件        protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)        {            GetContacts();            base.OnNavigatedTo(e);        }        // 獲取聯(lián)系人列表        async private void GetContacts()        {            conStore = await ContactStore.CreateOrOpenAsync();            ContactQueryResult conQueryResult = conStore.CreateContactQuery();            // 查詢聯(lián)系人            IReadOnlyList<StoredContact> conList = await conQueryResult.GetContactsAsync();            List<Item> list = new List<Item>();            foreach (StoredContact storCon in conList)            {                var properties = await storCon.GetPropertiesAsync();                list.Add(                    new Item                    {                        Name = storCon.FamilyName + storCon.GivenName,                        Id = storCon.Id,                        Phone = properties[KnownContactProperties.Telephone].ToString()                    });            }            conListBox.ItemsSource = list;        }        // 刪除聯(lián)系人事件處理        private async void Button_Click_1(object sender, RoutedEventArgs e)        {            Button deleteButton = sender as Button;            Item deleteItem = deleteButton.DataContext as Item;            await conStore.DeleteContactAsync(deleteItem.Id);            GetContacts();            }        // 跳轉(zhuǎn)到編輯聯(lián)系人頁面        private void Button_Click_2(object sender, RoutedEventArgs e)        {            Button deleteButton = sender as Button;            Item editItem = deleteButton.DataContext as Item;            NavigationService.Navigate(new Uri("/EditContact.xaml?Id=" + editItem.Id, UriKind.Relative));        }    }    // 自定義綁定的聯(lián)系人數(shù)據(jù)對象    class Item    {        public string Name { get; set; }        public string Id { get; set; }        public string Phone { get; set; }    }

EditContact.xaml文件主要代碼:聯(lián)系人編輯頁面

        <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">          <StackPanel>            <TextBlock HorizontalAlignment="Left" Text="名字" FontSize="30"/>            <TextBox HorizontalAlignment="Left" x:Name="name"  Height="85"  Text=""  Width="296"/>            <TextBlock HorizontalAlignment="Left"  Text="電話" FontSize="30" />            <TextBox HorizontalAlignment="Left" x:Name="phone"  Height="85"  Text=""  Width="296"/>            <Button Content="保存" HorizontalAlignment="Left" Width="308" Height="91" Click="Button_Click_1"/>          </StackPanel>        </Grid>

EditContact.xaml.cs文件主要代碼

private string conId = ""; private ContactStore conStore;//聯(lián)系人數(shù)據(jù)存儲 private StoredContact storCon; //聯(lián)系人對象 private IDictionary<string, object> properties;//聯(lián)系人屬性字典 public EditContact() { InitializeComponent(); } // 進入頁面事件處理 protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) { // 通過聯(lián)系人的id獲取聯(lián)系人的信息 if (NavigationContext.QueryString.ContainsKey("Id")) { conId = NavigationContext.QueryString["Id"].ToString(); GetContact(conId); } base.OnNavigatedTo(e); } // 保存編輯的聯(lián)系人 private async void Button_Click_1(object sender, RoutedEventArgs e) { if (name.Text != "" && phone.Text != "") { storCon.GivenName = name.Text; properties[KnownContactProperties.Telephone] = phone.Text; await storCon.SaveAsync();//保存聯(lián)系人 NavigationService.GoBack(); //返回上一個頁面 } else { MessageBox.Show("名字或者電話不能為空"); } } // 獲取需要編輯的聯(lián)系人信息 async private void GetContact(string id) { conStore = await ContactStore.CreateOrOpenAsync(); storCon = await conStore.FindContactByIdAsync(id); properties = await storCon.GetPropertiesAsync(); name.Text = storCon.GivenName; phone.Text = properties[KnownContactProperties.Telephone].ToString(); } phone.Text = properties[KnownContactProperties.Telephone].ToString(); }

程序的運行效果如圖所示

    相關(guān)評論

    閱讀本文后您有什么感想? 已有人給出評價!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過難過
    • 5 囧
    • 3 圍觀圍觀
    • 2 無聊無聊

    熱門評論

    最新評論

    發(fā)表評論 查看所有評論(1)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字數(shù): 0/500 (您的評論需要經(jīng)過審核才能顯示)
    推薦文章

    沒有數(shù)據(jù)