WindowPhone 中添加Calendar Appointment

虽然WP Mango已经提供了Reminder和Alarm,但个人更喜欢能将日程安排添加到自带的Calendar 中

可惜WP自带的Task中并没有这个接口

但在wp8 8月泄露的Sdk中发现了SaveAppointmentTask,不知道这个是否会被移植到7.8中

所以目前只能采用一个稍微麻烦点的方法:利用Live SDK

 

首先我们要去live SDK网站创建一个自己的应用,并且设置该应用为手机应用:

image

 

 

然后下载安装Sdk,新建Wp工程,并且添加引用live sdk的dll

image

 

 

然后在xaml中添加:

xmlns:my="clr-namespace:Microsoft.Live.Controls;assembly=Microsoft.Live.Controls"

然后我们首先要添加live Id的登陆授权:

<my:SignInButton Name="btnSignin" ClientId="Your Client ID" Scopes="wl.signin wl.basic wl.contacts_calendars wl.events_create" Branding="Hotmail" TextType="SignIn" SessionChanged="btnSignin_SessionChanged" HorizontalAlignment="Left"  VerticalAlignment="Top" />

 

ClientId就是刚才申请到客户端ID

SessionChanged是我们定义了一个事件用于判断是否登陆成功。

Scopes是获取授权的作用域范围,包括三种类型:

  • 核心作用域
  • 扩展作用域
  • 开发人员作用域

核心作用域

作用域实现的功能

wl.basic

对用户的基本个人资料信息进行读取访问。还可实现对用户的联系人列表进行读取访问。

wl.offline_access

应用能够随时读取和更新用户的信息。如果没有此作用域,那么,只有当用户已登录 Live Connect 而且正在使用你的应用时,你的应用才能够访问用户的信息。

wl.signin

单一登录行为。通过单一登录,已登录 Live Connect 的用户也会自动登录到你的网站。

 

扩展作用域

作用域实现的功能

wl.birthday

对用户的生日信息(包括出生日期、月份和年份)进行读取访问。

wl.calendars

对用户的日历和事件进行读取访问。

wl.calendars_update

对用户的日历和事件进行读写访问。

wl.contacts_birthday

对用户的联系人的出生日期和月份进行读取访问。请注意,此作用域还会赋予对用户的出生日期、月份和年份的读取访问权限。

wl.contacts_create

在用户的通讯簿中创建新联系人。

wl.contacts_calendars

对用户的日历和事件进行读取访问。还可实现对其他用户与该用户共享的任何日历和事件进行读取访问。

wl.contacts_photos

对用户的唱片集、照片、视频和音频及其相关的备注和标记进行读取访问。还可实现对其他用户与该用户共享的任何唱片集、照片、视频和音频进行读取访问。

wl.contacts_skydrive

对其他用户与该用户共享的 Microsoft SkyDrive 文件进行读取访问。请注意,此作用域还会赋予对存储在 SkyDrive 中的用户文件的读取访问权限。

wl.emails

对用户的个人、首选和商务电子邮件地址进行读取访问。

wl.events_create

在用户的默认日历上创建事件。

wl.messenger

允许登录到 Windows Live Messenger 可扩展消息和状态协议 (XMPP) 服务。

wl.phone_numbers

对用户的个人、商务和移动电话号码进行读取访问。

wl.photos

对用户的照片、视频、音频和唱片集进行读取访问。

wl.postal_addresses

对用户的邮政地址进行读取访问。

wl.share

可实现对用户状态消息的更新。

wl.skydrive

对存储在 SkyDrive 中的用户文件进行读取访问。

wl.skydrive_update

对存储在 SkyDrive 中的用户文件进行读写访问。

wl.work_profile

对用户的雇主和职位信息进行读取访问。

 

开发人员作用域

作用域实现的功能

wl.applications

对已经创建的、可以与 Live Connect API 协作的开发人员客户端 ID 进行读取访问。

wl.applications_create

代表开发人员创建新的客户端 ID。

 

更多细节参见live sdk介绍:http://msdn.microsoft.com/en-us/library/live/hh826528.aspx

 

我们在回来说判断登陆授权的SessionChanged

using Microsoft.Live;
using Microsoft.Live.Controls;

        private LiveConnectClient client;
        private LiveConnectSession session;

        private void btnSignin_SessionChanged(object sender, LiveConnectSessionChangedEventArgs e)
        {
            if (e.Status == LiveConnectSessionStatus.Connected)
            {
                session = e.Session;
                client = new LiveConnectClient(session);
                infoTextBlock.Text = "Signed in.";
                
            }
            else
            {
                infoTextBlock.Text = "Not signed in.";
                client = null;
            }

 

登陆授权后可以添加Calendar Appointment了,我们先看下Calendar中Event的结构

Event 对象

Event 对象包含有关用户的 Hotmail 日历上事件的信息。 Live Connect REST API 支持创建 Event 对象。使用 wl.events_create 作用域仅在用户的默认日历上创建 Event 对象。使用 wl.calendars 作用域在用户的日历上读取 Event 对象。使用 wl.calendars_update 在用户的任一日历上创建 Event 对象。使用 wl.contacts_calendars 作用域从用户好友的日历中读取 Event 对象。

Event 对象包含以下结构。

结构类型R/W创建时必需说明

ID

string

R

 

事件的 ID。

name

string

RW

事件的名称,其最长长度为 255 个字符。此结构是必需结构。

created_time

string

R

 

采用 ISO 8601 格式的时间,表示事件的创建时间。

updated_time

string

R

 

采用 ISO 8601 格式的时间,表示事件的更新时间。此结构仅在事件成功创建时返回的 Event 对象中可见。

description

string

RW

事件的描述,其最长长度为 32,768 个字符。此结构是必需结构。

calendar_id

object

R

 

包含事件的日历的 ID。

from

object

R

 

包含组织者的名称和 ID 的对象。

name (from 对象)

string

R

 

组织者的名称。

id (from 对象)

string

R

 

组织者的 ID。

start_time

string

RW

采用 ISO 8601 格式的事件开始时间。 在开始读取事件时,时间将是用户的本地时间,采用 ISO 8601 格式。

end_time

string

RW

 

采用 ISO 8601 格式的事件结束时间。如果未指定结束时间,则默认值为 start_time 后的 30 分钟。创建事件时此结构可选。 在开始读取事件时,时间将是用户的本地时间,采用 ISO 8601 格式。

location

string

RW

 

事件将发生的位置的名称。最大长度为 1,000 个字符。

is_all_day_event

true/false

RW

 

用于指定事件是否为全天事件的值。如果事件是全天事件,则此值为 true;否则为 false。如果缺少此结构,则默认值为 false

is_recurrent

true/false

R

 

用于指定事件是否为重复事件的值。如果事件为重复事件,则此值为 true;否则为 false

recurrence

string

R

 

重复模式的文本描述,例如“每周周二发生”。如果这不是重复事件,则该值为 Null

reminder_time

number

RW

 

发生提醒警报事件前的时间,以分钟为单位。

availability

string

RW

 

用户的事件可用性状态。有效值包括:

  • free
  • busy
  • tentative
  • out_of_office
默认值为 free

visibility

string

RW

 

用于指定事件是否公开可见的值。 有效值包括:

  • public—事件对所有可查看该日历的人均可见。
  • private"—事件仅对事件所有者可见。
默认值为 public

 

 

在代码中添加Calendar Appointment:

        private void CreateAppointment()
        {
            try
            {
                var calEvent = new Dictionary<string, object>();
                calEvent.Add("name", "国庆测试");
                calEvent.Add("description", "国庆测试");
                calEvent.Add("start_time", "2012-10-01T13:30:00+08:00");
                //calEvent.Add("end_time", "2012-10-01T13:50:00+08:00");
                calEvent.Add("location", "home");
                calEvent.Add("is_all_day_event", false);

                calEvent.Add("reminder_time", 30);
                calEvent.Add("availability", "busy");
                calEvent.Add("visibility", "public");
                LiveConnectClient createEvent = new LiveConnectClient(session);
                createEvent.PostCompleted +=
                    new EventHandler<LiveOperationCompletedEventArgs>(createEvent_PostCompleted);
                createEvent.PostAsync("me/events", calEvent);
            }
            catch (LiveConnectException exception)
            {
                this.infoTextBlock.Text = "Error creating event: " + exception.Message;
            }

        }


        void createEvent_PostCompleted(object sender, LiveOperationCompletedEventArgs e)
        {
            if (e.Error == null)
            {
                infoTextBlock.Text = "Event " +
                    e.Result["name"].ToString() +
                    " created with ID " +
                    e.Result["id"].ToString();
            }
            else
            {
                infoTextBlock.Text = "Error calling API: " + e.Error.ToString();
            }
        }

注意:开始时间和结束时间必须用下列受支持的格式之一来表示。

  • 时间必须以下列格式之一开头:yyyy-mm-ddThh:mm:ssyyyy-mm-ddThh:mm:ss.sssyyyy-mm-dd hh:mm:ss。例如,2011-05-10T14:29:00.000 表示 2011 年 5 月 10 日下午 2:29。
  • 时间必须以下列格式之一结尾:+hhmm-hhmm+hh:mm-hh:mmZ。这些格式将小时和分钟数表示为相对于 UTC 的偏移量。例如,-0700 表 UTC 之前七个小时。如果将此时间与上例结合使用,则结果为 2011-05-10T14:29:00.000-0700(表示 2011 年 5 月 10 日早晨 7:29)。

    注意  如果未指定 Z,则时间将被视为本地时间。而且,如果未指定 end_time,则默认的结束时间为指定 start_time 之后的 30 分钟。

 

执行完毕,我们就可以在live Calendar 看到添加的Appointment了:

image

 

Appointment很快就可以同步到我们的WP上去(当然前提你添加Calendar 的账户需要是你WP绑定的账户哦)

 

当然live sdk还有更多的功能:

更多见:http://msdn.microsoft.com/en-us/library/live/ff621314.aspx

posted @ 2012-09-30 17:02  sun8134  阅读(811)  评论(0编辑  收藏  举报
分享按钮