流星悟语 发表于 2016-4-10 21:45:49

Tizen日历:管理日历,日历事件

本教程演示了如何管理日历的设备访问、修改、添加和删除日历条目在指定日历在设备上。官方教程翻译下来的,凑合着看吧!此功能只支持移动应用程序。热身熟悉日历API通过学习基本知识:
[*]创建一个日历创建一个新的日历使用 日历构造函数。
[*]事件
将事件添加到日历将事件添加到默认日历,并定义一个事件的警报和递归规则。在批处理模式中添加事件日历将事件添加到默认日历在批处理模式。管理一个日程表事件更新和删除一个现有的日历事件。更新的日程表事件更新重复事件的一个实例。在批处理模式下管理多个日历事件更新和删除日历事件在批处理模式。日历事件格式转换把日历事件和iCalendar格式。
[*]任务
将任务添加到日历添加任务默认日历,任务定义警报。在批处理模式将任务添加到日历添加任务到默认日历在批处理模式。管理一个日历的任务更新和删除一个现有的日历任务。日历管理多个任务在批处理模式更新和删除日历任务在批处理模式。日历任务转换格式把日历任务和iCalendar格式。
[*]接收通知日历上的变化时接收通知日历条目的添加,更新或删除。
任务在 事件管理器任务,我们将穿过如何在应用程序中管理日历事件。先决条件使用日历API,应用程序必须通过添加以下权限请求许可 config.xml 文件:<tizen:privilege name="http://tizen.org/privilege/calendar.read"/>
<tizen:privilege name="http://tizen.org/privilege/calendar.write"/>创建一个日历创建一个新的日历日历是一个基本的管理技能:注意:创建日历与指定的帐户相关联。 因此,您必须检索帐户之前创建一个新的日历。


[*]声明一个变量来存储创建日历:var myCalendar = null;
[*]定义一个成功的回调 getAccounts () 方法。 回调接收的列表 账户对象。 使用第一个帐户ID来构造一个新的 日历对象。添加新的日历系统使用 addCalendar () 的方法 CalendarManager接口:function getAccountsSuccess(accounts)
{
   var account = accounts;
   if (account)
   {
      /* New calendar can be created and added */
      myCalendar = new tizen.Calendar(account.id, "remote calendar", "TASK");
      tizen.calendar.addCalendar(myCalendar);
      console.log("New calendar created with ID=" + myCalendar.id);
   }
}
[*]检索可用账户,使用 getAccounts () 方法。 以下方法调用调用 getAccountsSuccess 上面定义事件处理程序: tizen.account.getAccounts(getAccountsSuccess, function(err));
将事件添加到日历创建与应用程序与各种日历功能,你必须学会添加事件日历:
[*]检索系统默认使用的日历 getDefaultCalendar () 的方法 CalendarManager接口。参数,指定日历类型作为一个事件。var calendar = tizen.calendar.getDefaultCalendar("EVENT");
[*]创建一个 CalendarEvent对象和定义的事件属性:var ev = new tizen.CalendarEvent
({
   description:"HTML5 Introduction",
   summary:"HTML5 Webinar",
   startDate: new tizen.TZDate(2011, 3, 30, 10, 0),
   duration: new tizen.TimeDuration(1, "HOURS"),
   location:"Huesca",
[*]重复事件,定义一个递归规则。在这个例子中,3天的事件每天重复一次。   recurrenceRule: new tizen.CalendarRecurrenceRule("DAILY", {occurrenceCount: 3})
});
[*]设置一个闹钟,提醒用户事件,创建警报 CalendarAlarm接口,并添加事件的报警:/* Alarm is triggered with sound 30 minutes before the event start time */
var alarm = new tizen.CalendarAlarm(new tizen.TimeDuration(30, "MINS"), "SOUND");
ev.alarms = ;
[*]添加 CalendarEvent 对象默认日历的 添加add () 的方法 日历对象。calendar.add(ev);/* ev.id attribute is generated */
在批处理模式中添加事件日历创建与应用程序与各种日历功能,你必须学会在批处理模式中添加事件日历:1.检索系统默认使用的日历 getDefaultCalendar () 的方法 CalendarManager接口:var calendar = tizen.calendar.getDefaultCalendar("EVENT");2.定义项目添加一个数组:var ev = new tizen.CalendarEvent
({
   description:"HTML5 Introduction",
   summary:"HTML5 Webinar",
   startDate: new tizen.TZDate(2011, 3, 30, 10, 0),
   duration: new tizen.TimeDuration(1, "HOURS"),
   location:"Huesca"
});注意:保持尽可能简单的例子中,上面的数组只包含1事件。

3.使用 addBatch () 的方法 日历对象数组中的事件添加到日历:
calendar.addBatch();注意:addBatch () 方法是异步的,其必须使用回调对操作的成功或失败。

管理一个日程表事件创建与应用程序与各种日历功能,你必须学会管理一个日历事件:
[*]检索系统默认使用的日历 getDefaultCalendar () 的方法 CalendarManager接口。参数,指定日历类型事件。var myCalendar = tizen.calendar.getDefaultCalendar("EVENT");
[*]检索所有事件存储在日历使用 find () 的方法 日历对象:myCalendar.find(eventSearchSuccessCallback);注意:检索一组特定的事件,您可以指定一个过滤和排序顺序的搜索操作 过滤器filter 和 sortMode 参数(属性支持过滤器,看到日历过滤器属性)。在这个例子中,所有的事件都因为没有过滤检索使用。
[*]更新或删除里面的发现项 eventSearchSuccessCallback () 事件处理程序。在这个例子中,第一个事件的描述参数改变和更新事件日历使用 更新update () 方法。 第二个事件使用删除 删除remove () 方法。/* Define the event success callback */
function eventSearchSuccessCallback(events)
{
   /* Update the first existing event */
   events.description = "New Description";
   myCalendar.update(events);
   /* Delete the second existing event */
   myCalendar.remove(events.id);
}
更新的日程表事件
创建与应用程序与各种日历功能,你必须学会更新日程表事件重复:
[*]检索系统默认使用的日历 getDefaultCalendar () 的方法 CalendarManager接口。检索使用的日历事件 得到get() 方法通过指定事件ID。var calendar = tizen.calendar.getDefaultCalendar("EVENT");
var event = calendar.get(evId);
[*]扩大重复事件实例通过使用 expandRecurrence () 的方法 CalendarEvent对象: event.expandRecurrence(new tizen.TZDate(2012, 2, 1), new tizen.TZDate(2012, 2, 15),
                     eventExpandSuccessCB);扩展事件有自己的实例 id.uid 和 id.rid 属性, id.uid 属性是相同的所有实例。
[*]更新的单一实例重复事件扩大。
在重复事件的情况下,可以使用第二个参数 更新
在这个例子中,更新事件的第二个实例。update () 方法来确定单个实例或更新出现的所有事件。 如果参数设置 真正的true更新所有实例,而如果它被设置 假false的,只有指定的实例重复事件(基于更新 id.rid属性)。在这个例子中,更新事件的第二个实例。
/* Success event handler */
function eventExpandSuccessCB(events)
{
   events.summary = 'updated summary';
   calendar.update(events, false);
}
在批处理模式下管理多个日历事件创建与应用程序与各种日历功能,你必须学会管理多个日历事件在批处理模式:
[*]检索系统默认使用的日历 getDefaultCalendar () 的方法 CalendarManager接口。参数,指定日历类型事件。var myCalendar = tizen.calendar.getDefaultCalendar("EVENT");
[*]检索所有事件存储在日历使用 找到 () 的方法 日历对象:myCalendar.find(eventSearchSuccessCallback, errorCallback);注意:检索一组特定的事件,您可以指定一个过滤和排序顺序的搜索操作 过滤器filter 和 sortMode 参数(属性支持过滤器,看到日历过滤器属性)。在这个例子中,所有的事件都因为没有过滤检索使用。
[*]更新事件:


[*]定义的项目更新成功的事件处理程序 找到find () 方法:function eventSearchSuccessCallback(events)
{
   events.description = "New Description 1";
   events.description = "New Description 2";
[*]使用 updateBatch () 方法异步更新多个日历条目:   /* Update the first 2 existing events */
   myCalendar.updateBatch(events.slice(0, 2));
}
    4.删除事件,使用 removeBatch () 成功的事件处理程序的方法 找到find () 异步方法删除多个日历条目:function eventSearchSuccessCallback(events)
{
   /* Delete the first 2 existing events */
   myCalendar.removeBatch(.id, events.id]);
}日历事件格式转换下面的例子说明了如何使日历事件交换更有效的在您的应用程序通过将日历事件iCalendar格式或其他方式使用 CalendarEvent构造函数和 convertToString () 的方法 日历对象分别为:
[*]将一个iCalendar字符串转换为一个日历事件:

[*]检索系统默认使用的日历 getDefaultCalendar () 的方法 CalendarManager接口。参数,指定日历类型事件。var calendar = tizen.calendar.getDefaultCalendar("EVENT");
[*]创建一个新的 CalendarEvent 从iCalendar的字符串对象,并将它添加到默认日历: try
{
   var ev = new tizen.CalendarEvent
   (
      "BEGIN:VCALENDAR\r\n" +
      "BEGIN:VEVENT\r\n" +
      "DTSTAMP:19970901T1300Z\r\n" +
      "DTSTART:19970903T163000Z\r\n" +
      "DTEND:19970903T190000Z\r\n" +
      "SUMMARY:Tizen, Annual Employee Review\r\n" +
      "CATEGORIES:BUSINESS,HUMAN RESOURCES\r\n" +
      "END:VEVENT\r\n" +
      "END:VCALENDAR", "ICALENDAR_20"
   );
   calendar.add(ev);
   console.log('Event added with UID ' + ev.id.uid);
}

[*]将多个字符串,并将其导入到一个日历,把字符串,然后使用一个接一个 addBatch () 方法 添加所有的事件在一个批处理模式。
[*]把日历事件iCalendar格式:

[*]获得默认日历和找到所有日历事件,包括“Tizen”字符串 总结 属性:var myCalendar;
myCalendar = tizen.calendar.getDefaultCalendar("EVENT");
/* Define a filter */
var filter = new tizen.AttributeFilter("summary", "CONTAINS", "Tizen");
/* Search for the events */
myCalendar.find(eventSearchSuccessCallback, errorCallback, filter);
[*]日历事件转换为一个iCalendar字符串的成功事件处理程序 找到find () 方法使用 convertToString () 方法: function eventSearchSuccessCallback(events)
{
   /* Convert the first event */
   var vevent = events.convertToString("ICALENDAR_20");
}出口和转换多个事件日历,找到所需的事件使用 找到find () 方法应用过滤器,然后将发现事件一个接一个。
将任务添加到日历创建与应用程序与各种日历功能,你必须学会添加任务日历:
[*]检索系统默认使用的日历 getDefaultCalendar () 的方法 CalendarManager接口。与参数,指定日历类型的任务。var calendar = tizen.calendar.getDefaultCalendar("TASK");
[*]创建一个 CalendarTask对象和定义任务属性:var task = new tizen.CalendarTask
({
   description:"HTML5 Introduction",
   summary:"HTML5 Webinar",
   startDate: new tizen.TZDate(2011, 3, 10, 10, 0),
   dueDate: new tizen.TZDate(2011, 3, 30, 10, 0),
   completedDate: new tizen.TZDate(2011, 3, 20, 10, 0),
   location:"Huesca"
});
[*]设置一个闹钟,提醒用户的任务,创建警报 CalendarAlarm接口,并添加闹钟的任务:/* Alarm is triggered with sound 30 minutes before the task start time */
var alarm = new tizen.CalendarAlarm(new tizen.TimeDuration(30, "MINS"), "SOUND");
task.alarms = ;
[*]添加 CalendarTask 对象默认日历的 添加 () 的方法 日历对象:calendar.add(task);/* task.id attribute is generated */
在批处理模式将任务添加到日历创建与应用程序与各种日历功能,你必须学会添加任务日历在批处理模式:
[*]检索系统默认使用的日历 getDefaultCalendar () 的方法 CalendarManager接口:var calendar = tizen.calendar.getDefaultCalendar("TASK");
[*]定义项目添加一个数组:var task = new tizen.CalendarTask
({
   description:"HTML5 Introduction",
   summary:"HTML5 Webinar",
   startDate: new tizen.TZDate(2011, 3, 30, 10, 0),
   dueDate: new tizen.TZDate(2011, 5, 30, 10, 0),
   completedDate: new tizen.TZDate(2011, 4, 30, 10, 0),
   location:"Huesca"
});注意:保持尽可能简单的例子中,上面的数组只包含1的任务。
[*]使用 addBatch () 的方法 日历对象数组中的任务添加到日历:calendar.addBatch();注意: addBatch () 方法是异步的,其回调函数必须使用如果你想应对操作的成功或失败。
管理一个日历的任务创建与应用程序与各种日历功能,你必须学会管理一个日历任务:
[*]检索系统默认使用的日历 getDefaultCalendar () 的方法 CalendarManager接口。与参数,指定日历类型的任务。var myCalendar = tizen.calendar.getDefaultCalendar("TASK");
[*]检索所有任务通过使用存储在日历 找到find () 的方法 日历对象:myCalendar.find(taskSearchSuccessCallback);注意:检索一组特定的任务,您可以指定一个过滤和排序顺序的搜索操作 过滤器 和 sortMode 参数(属性支持过滤器,看到日历过滤器属性)。在这个例子中,所有的任务因为没有过滤检索使用。
[*]更新或删除里面的发现项 taskSearchSuccessCallback () 事件处理程序。在这个例子中,第一个任务的描述参数改变和更新任务日历使用 更新update () 方法。 第二个任务是使用删除 删除remove () 方法。/* Define the event success callback */
function taskSearchSuccessCallback(tasks)
{
   /* Update the first existing task */
   tasks.description = "New Description";
   myCalendar.update(tasks);
   /* Delete the second existing task */
   myCalendar.remove(tasks.id);
}
日历管理多个任务在批处理模式创建与应用程序与各种日历功能,你必须学会管理多个日历任务在批处理模式:
[*]检索系统默认使用的日历 getDefaultCalendar () 的方法 CalendarManager接口。与参数,指定日历类型的任务。var myCalendar = tizen.calendar.getDefaultCalendar("TASK");
[*]检索所有任务通过使用存储在日历 find () 的方法 日历对象:myCalendar.find(taskSearchSuccessCallback);注意:检索一组特定的任务,您可以指定一个过滤和排序顺序的搜索操作 filter 和 sortMode 参数(属性支持过滤器,看到日历过滤器属性)。在这个例子中,所有的任务因为没有过滤检索使用。
[*]更新任务:


[*]定义的项目更新成功的事件处理程序 find () 方法:function taskSearchSuccessCallback(tasks)
{
   tasks.description = "New Description 1";
   tasks.description = "New Description 2";2.使用 updateBatch () 方法异步更新多个日历条目:/* Update the first 2 existing tasks */
   myCalendar.updateBatch(tasks.slice(0, 2));
}

    4.删除任务,使用 removeBatch () 成功的事件处理程序的方法 找到 () 异步方法删除多个日历条目:function taskSearchSuccessCallback(tasks)
{
   /* Delete the first 2 existing tasks */
   myCalendar.removeBatch(.id, tasks.id]);
}日历任务转换格式下面的例子说明了如何使日历任务交换更有效的在您的应用程序通过将日历任务iCalendar格式或其他方式使用 CalendarTask构造函数和 convertToString () 的方法 日历对象分别为:
[*]将一个iCalendar字符串转换为一个日历任务:

[*]检索系统默认使用的日历 getDefaultCalendar () 的方法 CalendarManager接口。与参数,指定日历类型的任务。var calendar = tizen.calendar.getDefaultCalendar("TASK");
[*]创建一个新的 CalendarTask 从iCalendar的字符串对象,并将它添加到默认日历: var task = new tizen.CalendarTask
(
   "BEGIN:VCALENDAR\r\n" +
   "VERSION:2.0\r\n" +
   "BEGIN:VTODO\r\n" +
   "DTSTAMP:TZID=CET:20110902T110000Z\r\n" +
   "DTSTART;TZID=CET:20110906T140000Z\r\n" +
   "DUE;TZID=CET:20110906T150000Z\r\n" +
   "SUMMARY:Tizen, discuss the schedule\r\n" +
   "DESCRIPTION:Find the feasible schedule\r\n" +
   "CATEGORIES:HUMAN RESOURCES\r\n" +
   "END:VTODO\r\n" +
   "END:VCALENDAR", "ICALENDAR_20"
);
calendar.add(task);
console.log('Task added with id ' + task.id);

[*]将多个字符串,并将其导入到一个日历,把字符串,然后使用一个接一个 addBatch () 方法 添加所有的任务在一个批处理模式。
[*]把日历任务iCalendar格式:

[*]把默认日历和找到所有日历包括“Tizen”字符串 总结Summary 属性:var myCalendar;
myCalendar = tizen.calendar.getDefaultCalendar("TASK");
/* Define a filter */
var filter = new tizen.AttributeFilter("summary", "CONTAINS", "Tizen");
/* Search for the tasks */
myCalendar.find(taskSearchSuccessCallback, null, filter);
[*]一个日历条目转换为一个iCalendar字符串的成功事件处理程序 找到 () 方法使用 convertToString () 方法: function taskSearchSuccessCallback(tasks)
{
   /* Convert the first task */
   var vtodo = tasks.convertToString("ICALENDAR_20");
}

[*]出口将多个任务从一个日历,找到所需的任务使用 找到find() 方法应用过滤器,然后将发现任务一个接一个。
接收通知日历上的变化创建与应用程序与各种日历功能,你必须学会接收通知当日历条目的添加,更新,或删除:
[*]定义所需的变量:/* Watcher identifier */
var watcherId = 0;
/* This example assumes that the calendar is initialized */
var calendar;
[*]定义事件处理程序使用不同的通知 CalendarChangeCallback监听器接口:var watcher =
{
   /* When new items are added */
   onitemsadded: function(items)
   {
      console.log(items.length + " items were added");
   },
   /* When items are updated */
   onitemsupdated: function(items)
   {
      console.log(items.length + " items were updated");
   },
   /* When items are deleted */
   onitemsremoved: function(ids)
   {
      console.log(ids.length + " items were removed");
   }
};
[*]注册侦听器使用定义的事件处理程序:watcherId = calendar.addChangeListener(watcher);
[*]停止通知,使用 removeChangeListener () 方法:function cancelWatch()
{
   calendar.removeChangeListener(watcherId);
}
页: [1]
查看完整版本: Tizen日历:管理日历,日历事件