联系人资料是手机上必有的,在最新的 Windows Phone 中开放了相应的 API ,以便于应用程序读写通讯录。

注意:系统没有对整个手机自带的通讯录写入开放权限,每个应用只能管理属于当前应用的联系人。

联系人存储

     <StackPanel>
<TextBox x:Name="txtName" Header="姓名" InputScope="NameOrPhoneNumber"/>
<TextBox x:Name="txtTel" Header="电话" InputScope="ChineseHalfWidth"/>
<TextBox x:Name="txtTel1" Header="电话" InputScope="TelephoneNumber"/>
<Button x:Name="btnSave" Content="Save" Click="btnSave_Click"/>
<Button x:Name="btnGet" Content="GET" Click="btnGet_Click"/>
<Button x:Name="btnPicker" Content="Picker" Click="btnPicker_Click"/>
<Button x:Name="btnGet2" Content="获取联系人信息2" Click="btnGet2_Click"/>
</StackPanel>
         private async void btnSave_Click(object sender, RoutedEventArgs e)
{
var name = txtName.Text;
var tel = txtTel.Text; // 联系人存储容器
ContactStore contactStore = await ContactStore.CreateOrOpenAsync(ContactStoreSystemAccessMode.ReadWrite, ContactStoreApplicationAccessMode.ReadOnly); // 创建联系人信息对象
ContactInformation contactInformation = new ContactInformation();
// 设置联系人信息展示名称
contactInformation.DisplayName = name;
// 详细属性
var contactProps = await contactInformation.GetPropertiesAsync();
// 详细属性编辑通过字典形式操作,需要记住所有的属性名都有KnownContactProperties点出来
contactProps.Add(KnownContactProperties.MobileTelephone, tel); // 创建一个存储对象将联系人信息存储到存储容器中
StoredContact storedContact = new StoredContact(contactStore, contactInformation);
// 保存
await storedContact.SaveAsync();
} private async void btnGet_Click(object sender, RoutedEventArgs e)
{
// 联系人存储容器
ContactStore contactStore = await ContactStore.CreateOrOpenAsync(ContactStoreSystemAccessMode.ReadWrite, ContactStoreApplicationAccessMode.ReadOnly); // 通过联系人存储容器查询联系人列表
var result = contactStore.CreateContactQuery(); var count = await result.GetContactCountAsync(); var list = await result.GetContactsAsync(); foreach (var item in list)
{
System.Diagnostics.Debug.WriteLine(item.DisplayName);
}
} private async void btnPicker_Click(object sender, RoutedEventArgs e)
{
// 联系人选择器Flyout
Windows.ApplicationModel.Contacts.ContactPicker contactPicker = new Windows.ApplicationModel.Contacts.ContactPicker();
// 必须设置以下项
contactPicker.DesiredFieldsWithContactFieldType.Add(Windows.ApplicationModel.Contacts.ContactFieldType.PhoneNumber);
// 查询所有选中对象
var temp = await contactPicker.PickContactsAsync(); }

两种系统联系人读取的形式

     <Grid>
<TextBox x:Name="txtSearch"/>
<Button x:Name="btnSearch" Content="Search" Click="btnSearch_Click"/>
</Grid>
         private async void btnSearch_Click(object sender, RoutedEventArgs e)
{
var contactStore = await Windows.ApplicationModel.Contacts.ContactManager.RequestStoreAsync();
// 通过联系人存储容器查询联系人列表(全文检索)
if (string.IsNullOrEmpty(txtSearch.Text))
{
var result = await contactStore.FindContactsAsync();
foreach (var item in result)
{
System.Diagnostics.Debug.WriteLine(item.DisplayName);
}
}
else
{
var result = await contactStore.FindContactsAsync(txtSearch.Text);
foreach (var item in result)
{
System.Diagnostics.Debug.WriteLine(item.DisplayName);
}
} System.Diagnostics.Debug.WriteLine("--------------------------------");
}

Windows Phone 二十一、联系人存储的更多相关文章

  1. Exchange2016 & Skype for business 集成之三统一联系人存储

    Exchange2016&Skype for business集成之二统一联系人存储 利用统一的联系人存储库,用户可以维护单个联系人列表,然后使这些联系人适用于多个应用程序,包括 Skype ...

  2. Citrix 服务器虚拟化之二十一 桌面虚拟化之部署Provisioning Services

    Citrix 服务器虚拟化之二十一  桌面虚拟化之部署Provisioning Services Provisioning Services 是Citrix 出品的一系列虚拟化产品中最核心的一个组件, ...

  3. 【WP8.1开发】基于应用的联系人存储

    上一篇文章所吹的牛是访问系统(手机)上的联系人,当然那只是读不能改,这是自然的,要是让你能随便修改用户的联系人信息的话,那后果很严重,有些恶意开发者就有可能把”你的户口改成猪“. 但是,API也允许应 ...

  4. WCF技术剖析之二十一:WCF基本异常处理模式[下篇]

    原文:WCF技术剖析之二十一:WCF基本异常处理模式[下篇] 从FaultContractAttribute的定义我们可以看出,该特性可以在同一个目标对象上面多次应用(AllowMultiple = ...

  5. JAVA之旅(二十一)——泛型的概述以及使用,泛型类,泛型方法,静态泛型方法,泛型接口,泛型限定,通配符

    JAVA之旅(二十一)--泛型的概述以及使用,泛型类,泛型方法,静态泛型方法,泛型接口,泛型限定,通配符 不知不觉JAVA之旅已经写到21篇了,不得不感叹当初自己坚持要重学一遍JAVA的信念,中途也算 ...

  6. 云计算设计模式(二十一)——Sharding分片模式

    云计算设计模式(二十一)——Sharding分片模式 将一个数据存储到一组水平分区或碎片.存储和访问大量数据时,这个模式可以提高可扩展性. 背景和问题 由一个单一的服务器托管的数据存储区可能会受到以下 ...

  7. 条目二十一《总是让比较函数在等值情况下返回false》

    条目二十一<总是让比较函数在等值情况下返回false> 这条目对序列容器是不适合的,因为序列容器就是通过等值判断来比较的. 对于关联容器来说,比较是等价比较,所以要注意等值的时候,比较子的 ...

  8. Directx11学习笔记【二十一】 封装键盘鼠标响应类

    原文:Directx11学习笔记[二十一] 封装键盘鼠标响应类 摘要: 本文由zhangbaochong原创,转载请注明出处:http://www.cnblogs.com/zhangbaochong/ ...

  9. 第十六届“二十一世纪的计算”学术研讨会 密西根州立大学教授Anil K. Jain主题演讲

    Biometrics---How Do I Know Who You Are? 密西根州立大学教授Anil K. Jain主题演讲" title="第十六届"二十一世纪的 ...

随机推荐

  1. Why do we live in this world?

    Why do we live in this world? It seems to me there is nothing but two reasons, - to live the livabil ...

  2. CI框架如何在主目录application目录之外使用uploadify上传插件和bootstrap前端框架:

    19:29 2016/3/10CI框架如何在主目录application目录之外使用uploadify上传插件和bootstrap前端框架:项目主路径:F:\wamp\www\graduationPr ...

  3. express请求及对应的获取说明

    express 封装了多种 http 请求方式,我们主要只使用 get 和 post 两种,即 app.get() 和 app.post() . app.get() 和 app.post() 的第一个 ...

  4. 《Storm入门》中文版

    本文翻译自<Getting Started With Storm>译者:吴京润    编辑:郭蕾 方腾飞 本书的译文仅限于学习和研究之用,没有原作者和译者的授权不能用于商业用途. 译者序 ...

  5. 问题(the question)

    I want to know: 1. 软件开发最主要的目的 是什么? 2. 软件开发是否同样需要模,和架构? 3.软件开发与其他程序的需求分析是否相似,有什么不同之处? 4.软件开发最常用的计算机语言 ...

  6. securecrt 检测到较旧的配置设置 需要迁移为新格式

    secureCRT一直没有关闭,新登录的服务器的配置信息没有保存,一直打开时无法保存的,需要全关了,再打开就正常了!!!

  7. synchronized的实现原理和应用

    在多线程并发编程中synchronized是元老级的角色,人多称重量级锁. synchronized实现同步的基础:Java中的每一个对象都可以作为锁.具体表现有如下3种: 1.对于普通同步方法,锁时 ...

  8. maven模块

    用maven无它,唯方便而. 模块依赖可以用来做一些公共模块,多个工程调用. 先子模块 install 或者package.在父模块install

  9. 解决Android Studio Gradle Build Running慢的问题

    Android Studio方便好用,但是Android Studio Gradle Build Running很慢 解决方法: C:\Users\你的用户名\.gradle 目录下新建一个文件名为 ...

  10. springboot+redis

    上篇整合了DB层,现在开始整合缓存层,使用redis. springboot驱动注解,使用spring注入JedisPool便可封装自己的redis工具类. package hello.configu ...