Windows Phone 二十一、联系人存储
联系人资料是手机上必有的,在最新的 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 二十一、联系人存储的更多相关文章
- Exchange2016 & Skype for business 集成之三统一联系人存储
Exchange2016&Skype for business集成之二统一联系人存储 利用统一的联系人存储库,用户可以维护单个联系人列表,然后使这些联系人适用于多个应用程序,包括 Skype ...
- Citrix 服务器虚拟化之二十一 桌面虚拟化之部署Provisioning Services
Citrix 服务器虚拟化之二十一 桌面虚拟化之部署Provisioning Services Provisioning Services 是Citrix 出品的一系列虚拟化产品中最核心的一个组件, ...
- 【WP8.1开发】基于应用的联系人存储
上一篇文章所吹的牛是访问系统(手机)上的联系人,当然那只是读不能改,这是自然的,要是让你能随便修改用户的联系人信息的话,那后果很严重,有些恶意开发者就有可能把”你的户口改成猪“. 但是,API也允许应 ...
- WCF技术剖析之二十一:WCF基本异常处理模式[下篇]
原文:WCF技术剖析之二十一:WCF基本异常处理模式[下篇] 从FaultContractAttribute的定义我们可以看出,该特性可以在同一个目标对象上面多次应用(AllowMultiple = ...
- JAVA之旅(二十一)——泛型的概述以及使用,泛型类,泛型方法,静态泛型方法,泛型接口,泛型限定,通配符
JAVA之旅(二十一)--泛型的概述以及使用,泛型类,泛型方法,静态泛型方法,泛型接口,泛型限定,通配符 不知不觉JAVA之旅已经写到21篇了,不得不感叹当初自己坚持要重学一遍JAVA的信念,中途也算 ...
- 云计算设计模式(二十一)——Sharding分片模式
云计算设计模式(二十一)——Sharding分片模式 将一个数据存储到一组水平分区或碎片.存储和访问大量数据时,这个模式可以提高可扩展性. 背景和问题 由一个单一的服务器托管的数据存储区可能会受到以下 ...
- 条目二十一《总是让比较函数在等值情况下返回false》
条目二十一<总是让比较函数在等值情况下返回false> 这条目对序列容器是不适合的,因为序列容器就是通过等值判断来比较的. 对于关联容器来说,比较是等价比较,所以要注意等值的时候,比较子的 ...
- Directx11学习笔记【二十一】 封装键盘鼠标响应类
原文:Directx11学习笔记[二十一] 封装键盘鼠标响应类 摘要: 本文由zhangbaochong原创,转载请注明出处:http://www.cnblogs.com/zhangbaochong/ ...
- 第十六届“二十一世纪的计算”学术研讨会 密西根州立大学教授Anil K. Jain主题演讲
Biometrics---How Do I Know Who You Are? 密西根州立大学教授Anil K. Jain主题演讲" title="第十六届"二十一世纪的 ...
随机推荐
- 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 ...
- CI框架如何在主目录application目录之外使用uploadify上传插件和bootstrap前端框架:
19:29 2016/3/10CI框架如何在主目录application目录之外使用uploadify上传插件和bootstrap前端框架:项目主路径:F:\wamp\www\graduationPr ...
- express请求及对应的获取说明
express 封装了多种 http 请求方式,我们主要只使用 get 和 post 两种,即 app.get() 和 app.post() . app.get() 和 app.post() 的第一个 ...
- 《Storm入门》中文版
本文翻译自<Getting Started With Storm>译者:吴京润 编辑:郭蕾 方腾飞 本书的译文仅限于学习和研究之用,没有原作者和译者的授权不能用于商业用途. 译者序 ...
- 问题(the question)
I want to know: 1. 软件开发最主要的目的 是什么? 2. 软件开发是否同样需要模,和架构? 3.软件开发与其他程序的需求分析是否相似,有什么不同之处? 4.软件开发最常用的计算机语言 ...
- securecrt 检测到较旧的配置设置 需要迁移为新格式
secureCRT一直没有关闭,新登录的服务器的配置信息没有保存,一直打开时无法保存的,需要全关了,再打开就正常了!!!
- synchronized的实现原理和应用
在多线程并发编程中synchronized是元老级的角色,人多称重量级锁. synchronized实现同步的基础:Java中的每一个对象都可以作为锁.具体表现有如下3种: 1.对于普通同步方法,锁时 ...
- maven模块
用maven无它,唯方便而. 模块依赖可以用来做一些公共模块,多个工程调用. 先子模块 install 或者package.在父模块install
- 解决Android Studio Gradle Build Running慢的问题
Android Studio方便好用,但是Android Studio Gradle Build Running很慢 解决方法: C:\Users\你的用户名\.gradle 目录下新建一个文件名为 ...
- springboot+redis
上篇整合了DB层,现在开始整合缓存层,使用redis. springboot驱动注解,使用spring注入JedisPool便可封装自己的redis工具类. package hello.configu ...