【WP8.1开发】基于应用的联系人存储
上一篇文章所吹的牛是访问系统(手机)上的联系人,当然那只是读不能改,这是自然的,要是让你能随便修改用户的联系人信息的话,那后果很严重,有些恶意开发者就有可能把”你的户口改成猪“。
但是,API也允许应用程序读写自己的联系人信息,即系统会为某个应用程序分配一个联系人存储区,应用程序可以在其中读写联系人信息。基于应用的联系人存储会集成到系统的”人脉“应用中,也就是说你保存到属于你的应用的联系人会显示在”人脉“应用中。
用于读写基于应用的联系人的API都位于Windows.Phone.PersonalInformation命名空间中,注意要与上一篇文章中所说的API区分,那个是读取基于系统的联系人信息,而现在所说的API是基于应用本身的。
该命名空间下的类我就不一一介绍了,我非常讨厌拿个类出来,然后列个表,这个类有什么什么属性,有什么什么方法,有什么什么事件等。我也比较鄙视这样的图书和教程,作者不能拿读者当SB,老从MSDN上抄,所以,不要问我哪个类有哪些成员这种问题,要问你就问MSDN去。
不过,有两个类很容易搞混,需要解释一下。
ContactStore:指系统分配给当前应用的联系人存储区,它指的是一个整体。在使用时,调用静态的CreateOrOpenAsync方法就可以返回一个ContactStore实例。如果不存在存储区,系统会进行分配;如果存在,就直接打开。这个方法有一个带参数的重载:
public static IAsyncOperation<ContactStore> CreateOrOpenAsync(
ContactStoreSystemAccessMode access,
ContactStoreApplicationAccessMode sharing
)
access参数指定系统对该存储区的权限,如果为ReadOnly,则系统只能读取该存储区中的联系人,而不能改写,也就是说在”人脉“应用中你不能向当前应用新增联系人,也不能修改。sharing参数指定其他应用对该存储区中联系人的访问权限。
StoredContact:指的是存储区中某个联系人的信息,它表示的是单个实体。可以通过GetPropertiesAsync方法返回一个字典实例,键是字符串,值为任意类型。该字典用设置联系人的”标准“字段,这些字段可以在”人脉“中显示,如姓、名、电邮地址、手机号、工作电话、住址等。这些字段的名称可以通过KnownContactProperties类的静态属性获取。
GetExtendedPropertiesAsync方法返回当前联系人的扩展字段的字典实例,这些字段开发者可以自己定义,比如定义一个Key为”RP“的字段,表示该位联系人的人品系数。这些扩展字段只能在我们的应用程序中用代码访问,”人脉“应用中是不显示扩展字段的。
如果要向存储区中添加新联系人,实例化一个StoredContact对象,然后从GetPropertiesAsync方法获取字段字典,然后根据需要设置对应的值,最后调用StoredContact.SaveAsync方法,联系人就会保存到存储区中,
那么,要删除联系人呢 ? 调用ContactStore类的DeleteContactAsync方法,参数为联系人的ID(即StoredContact的Id属性)。注意,删除某个联系人是调用DeleteContactAsync方法,如果调用DeleteAsync方法会把系统为应用所分配的整个联系人存储区删除。
理论知识就说到这里,剩下的留给大家自己去体味。下面我做了一个比较简单的示例,当然一个示例是无法示范所有功能的,只做演示之用。示例实现了显示应用联系人存储区中的联系人列表,以及新增联系人两项功能。
先看如何获取存储区中所有联系人列表。
ContactStore store = await ContactStore.CreateOrOpenAsync(ContactStoreSystemAccessMode.ReadWrite, ContactStoreApplicationAccessMode.ReadOnly);
// 创建查询
ContactQueryResult qry = store.CreateContactQuery();
// 获取所有联系人
var contacts = await qry.GetContactsAsync();
lvContacts.ItemsSource = contacts;
获取联系人列表是通过”查询“对象来访问的,CreateContactQuery返回一个ContactQueryResult实例,姑且叫它”查询结果“。通过这个查询结果,我们可以调用GetContactsAsync返回联系人列表。
下面是新增联系人的代码。
ContactStore store = await ContactStore.CreateOrOpenAsync(ContactStoreSystemAccessMode.ReadWrite, ContactStoreApplicationAccessMode.ReadOnly);
// 创建联系人
StoredContact contact = new StoredContact(store);
// 设置字段
IDictionary<string, object> sets = await contact.GetPropertiesAsync();
sets[KnownContactProperties.GivenName] = txtName.Text;
sets[KnownContactProperties.Email] = txtEmail.Text;
sets[KnownContactProperties.CompanyName] = txtComp.Text;
sets[KnownContactProperties.Telephone] = txtPhone.Text;
// 保存
await contact.SaveAsync();
要记住的是,在设置完新联系人的各个字段值后,要调用SaveAsync方法来保存联系人,不然就等于白劳动了。
最后一步,就是在清单文件中配置权限。在”功能“选项卡下勾选”联系人“,然后保存。
最后可以看看结果图。
示例的源码下载:http://files.cnblogs.com/tcjiaan/ContactOnAppSample.zip
哦,时间到了,开饭。
【WP8.1开发】基于应用的联系人存储的更多相关文章
- 随着应用对事务完整性和并发性要求的不断提高,MySQL才开始开发基于事务的存储引擎
MYSQL 解锁与锁表 - 专注it - 博客园 https://www.cnblogs.com/wanghuaijun/p/5949934.html 2016-10-11 16:50 MYSQL 解 ...
- 《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(上)
目录 前言 第1章 安装 第2章 程序的基本结构 第3章 模板 第4章 Web表单 第5章 数据库 第6章 电子邮件 第7章 大型程序的结构 前言 学习Python也有一个半月时间了,学到现在感觉 ...
- 基于OceanStor Dorado V3存储之数据保护 Hyper 特性
基于OceanStor Dorado V3存储之数据保护 Hyper 特性 1.1 快照 1.2 HyperCDP 1.3 HyperCopy 1.4 克隆(HyperClone) 1.5 ...
- SSM开发基于Java EE在线图书销售系统
SSM(Spring+Spring MVC+MyBatis)开发基于Java EE在线图书销售系统 网站成功建立和运行很大部分取决于网站开发前的规划,因此为了在网站建立过程中避免一些不 ...
- 基于腾讯云存储COS的ClickHouse数据冷热分层方案
一.ClickHouse简介 ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS),支持PB级数据量的交互式分析,ClickHouse最初是为YandexMetrica ...
- .NET6: 开发基于WPF的摩登三维工业软件 (8) - MVVM
基于WPF开发界面的一个很大优势是可以方便地基于MVVM设计模式开发应用.本文从应用的角度基于MVVM实现参数化管材的创建界面. 1 MVVM MVVM是Model-View-ViewModel的简写 ...
- [Intel Edison开发板] 05、Edison开发基于MRAA实现IO控制,特别是UART通信
一.前言 下面是本系列文章的前几篇: [Intel Edison开发板] 01.Edison开发板性能简述 [Intel Edison开发板] 02.Edison开发板入门 [Intel Edison ...
- Windows Phone 二十一、联系人存储
联系人资料是手机上必有的,在最新的 Windows Phone 中开放了相应的 API ,以便于应用程序读写通讯录. 注意:系统没有对整个手机自带的通讯录写入开放权限,每个应用只能管理属于当前应用的联 ...
- chrome开发总结(交互/权限/存储)-爬虫
chrome开发总结(交互/权限/存储)-爬虫 [TOC] 标签(空格分隔): 杂乱之地 经过一翻折腾.还是选择了chrome来做爬虫.主要是为了解决一些ajax加载的问题以及代理的问题. 1.chr ...
随机推荐
- [UCSD白板题] Points and Segments
Problem Introduction The goal in this problem is given a set of segments on a line and a set of poin ...
- c#dataGridView奇偶数行变色
dataGridView_Performance.RowsDefaultCellStyle.BackColor = Color.Bisque; dataGridView_Performance.Alt ...
- 8.1 消息通信 EventBus
EventBus是一个事件发布和订阅的框架.EventBus是一款针对Android优化的发布/订阅事件总线.主要功能是替代Intent,Handler,BroadCast 在Fragment,Act ...
- Android多线程
final Handler handler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { ...
- C++ 非阻塞套接字的使用 (1)
在维护代码的过程中,发现软件运行的CPU占用率居高不下,在4核的电脑上占用了25%的CPU.查阅资料的得知,这是可能是由于软件中出现了死循环. 经过对软件的一些测试,最终确定了死循环出现的位置——通讯 ...
- Linux内核--网络栈实现分析(三)--驱动程序层+链路层(上)
本文分析基于Linux Kernel 1.2.13 原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7497260 更多请看专栏,地址 ...
- webview使用总结及注意事项
1 网页 调用后台java代码 ,后台处理 一 网页上click事件 <a href="javascript:;" onclick="window.JsNative ...
- mongoDB研究笔记:复制集概述
自我学习,仅供参考: 数据库总是会遇到各种失败的场景,如网络连接断开.断电等,尽管journaling日志功能也提供了数据恢复的功能,但journaling通常是针对单个节点来说的,只能保证单节点数据 ...
- Linux + Mono 目前已经支持Entity Framework 6.1
在上个随笔 CentOS上 Mono3.2.8运行ASP.NET MVC4经验中,步骤2中要求卸载EF 5.0,这样才能在Linux + Mono的环境中运行ASP.NET MVC4的Web应用.今天 ...
- 可在广域网部署运行的QQ高仿版 -- GG叽叽V3.2,增加离线消息、离线文件功能(源码)
(几句题外话:虽然就如何将GG发展为一个有商业价值的产品,我还没有很清晰明确的思路,但是从GG发布以来,通过GG认识了一些朋友,也接了一些小单子,赚了一点小钱.有了一点甜头,目前和2.3个好朋友一起做 ...