联系人资料是手机上必有的,在最新的 Windows Phone 中开放了相应的 API ,以便于应用程序读写通讯录。
注意:系统没有对整个手机自带的通讯录写入开放权限,每个应用只能管理属于当前应用的联系人。
联系人存储
1 <StackPanel> 2 <TextBox x:Name="txtName" Header="姓名" InputScope="NameOrPhoneNumber"/> 3 <TextBox x:Name="txtTel" Header="电话" InputScope="ChineseHalfWidth"/> 4 <TextBox x:Name="txtTel1" Header="电话" InputScope="TelephoneNumber"/> 5 <Button x:Name="btnSave" Content="Save" Click="btnSave_Click"/> 6 <Button x:Name="btnGet" Content="GET" Click="btnGet_Click"/> 7 <Button x:Name="btnPicker" Content="Picker" Click="btnPicker_Click"/> 8 <Button x:Name="btnGet2" Content="获取联系人信息2" Click="btnGet2_Click"/> 9 </StackPanel>
1 private async void btnSave_Click(object sender, RoutedEventArgs e) 2 { 3 var name = txtName.Text; 4 var tel = txtTel.Text; 5 6 // 联系人存储容器 7 ContactStore contactStore = await ContactStore.CreateOrOpenAsync(ContactStoreSystemAccessMode.ReadWrite, ContactStoreApplicationAccessMode.ReadOnly); 8 9 // 创建联系人信息对象 10 ContactInformation contactInformation = new ContactInformation(); 11 // 设置联系人信息展示名称 12 contactInformation.DisplayName = name; 13 // 详细属性 14 var contactProps = await contactInformation.GetPropertiesAsync(); 15 // 详细属性编辑通过字典形式操作,需要记住所有的属性名都有KnownContactProperties点出来 16 contactProps.Add(KnownContactProperties.MobileTelephone, tel); 17 18 19 // 创建一个存储对象将联系人信息存储到存储容器中 20 StoredContact storedContact = new StoredContact(contactStore, contactInformation); 21 // 保存 22 await storedContact.SaveAsync(); 23 } 24 25 private async void btnGet_Click(object sender, RoutedEventArgs e) 26 { 27 // 联系人存储容器 28 ContactStore contactStore = await ContactStore.CreateOrOpenAsync(ContactStoreSystemAccessMode.ReadWrite, ContactStoreApplicationAccessMode.ReadOnly); 29 30 // 通过联系人存储容器查询联系人列表 31 var result = contactStore.CreateContactQuery(); 32 33 var count = await result.GetContactCountAsync(); 34 35 var list = await result.GetContactsAsync(); 36 37 foreach (var item in list) 38 { 39 System.Diagnostics.Debug.WriteLine(item.DisplayName); 40 } 41 } 42 43 private async void btnPicker_Click(object sender, RoutedEventArgs e) 44 { 45 // 联系人选择器Flyout 46 Windows.ApplicationModel.Contacts.ContactPicker contactPicker = new Windows.ApplicationModel.Contacts.ContactPicker(); 47 // 必须设置以下项 48 contactPicker.DesiredFieldsWithContactFieldType.Add(Windows.ApplicationModel.Contacts.ContactFieldType.PhoneNumber); 49 // 查询所有选中对象 50 var temp = await contactPicker.PickContactsAsync(); 51 52 }
两种系统联系人读取的形式
1 <Grid> 2 <TextBox x:Name="txtSearch"/> 3 <Button x:Name="btnSearch" Content="Search" Click="btnSearch_Click"/> 4 </Grid>
1 private async void btnSearch_Click(object sender, RoutedEventArgs e) 2 { 3 var contactStore = await Windows.ApplicationModel.Contacts.ContactManager.RequestStoreAsync(); 4 // 通过联系人存储容器查询联系人列表(全文检索) 5 if (string.IsNullOrEmpty(txtSearch.Text)) 6 { 7 var result = await contactStore.FindContactsAsync(); 8 foreach (var item in result) 9 { 10 System.Diagnostics.Debug.WriteLine(item.DisplayName); 11 } 12 } 13 else 14 { 15 var result = await contactStore.FindContactsAsync(txtSearch.Text); 16 foreach (var item in result) 17 { 18 System.Diagnostics.Debug.WriteLine(item.DisplayName); 19 } 20 } 21 22 23 System.Diagnostics.Debug.WriteLine("--------------------------------"); 24 }