实现功能:
- 建立自己的账户,每次插入日历都使用自己的账户,区分第三方日历账户与系统日历账户
- 实现建立的日历删除
- 实现2次闹钟提醒,(addcalendar中的参数 fr, tr的值必须为分钟数字,比如:你的闹钟设置是1个小时提醒,输入的参数必须是60)
mui.plusReady(function() {
if(mui.os.ios) {
} else {
var calanderURL = 'content://com.android.calendar/calendars',
eventsURL = 'content://com.android.calendar/events',
ContentValues = plus.android.importClass("android.content.ContentValues"),
Uri = plus.android.importClass('android.net.Uri'),
ContentUris = plus.android.importClass('android.content.ContentUris'),
Calendar = plus.android.importClass('java.util.Calendar'),
main = plus.android.runtimeMainActivity(),
userCursor = plus.android.invoke(main.getContentResolver(), 'query', Uri.parse(calanderURL), null, null, null, null),
userCursor_count = plus.android.invoke(userCursor, 'getCount'),
TimeZone = plus.android.importClass('java.util.TimeZone'),
TimeZone_str = plus.android.invoke(TimeZone.getDefault(), 'getID');
}
//Nid参数为数据库中的一个id,可以不用,我用这个Nid实现与手机系统的日历事件id进行关联
addcalendar = function(Nid, title, description, date_str, etime, fr, tr) {
if(userCursor_count <= 0) { //如果没有日历账户
addcalendaraccount();
userCursor = plus.android.invoke(main.getContentResolver(), 'query', Uri.parse(calanderURL), null, null, null, null);
userCursor_count++;
}
plus.android.invoke(userCursor, 'moveToFirst');//第一个
//plus.android.invoke(userCursor, 'moveToLast');//最后一个
//plus.android.invoke(userCursor, 'moveToNext');//下一个
for(var i = 0; i < userCursor_count; i++) {
var calName = plus.android.invoke(userCursor, 'getString', plus.android.invoke(userCursor, 'getColumnIndex', 'calendar_displayName'));
//获得日历的描述名称
if(calName == "OA日历") {
break;
}
if(i == (userCursor_count - 1)) {
addcalendaraccount();
userCursor = plus.android.invoke(main.getContentResolver(), 'query', Uri.parse(calanderURL), null, null, null, null);
userCursor_count++;
}
plus.android.invoke(userCursor, 'moveToNext');
}
try {
var calId = plus.android.invoke(userCursor, 'getString', plus.android.invoke(userCursor, 'getColumnIndex', '_id')),
events = new ContentValues(),
mCalendar = Calendar.getInstance(),
date = date_str.split(/\s{1}|:|-/g);
plus.android.invoke(mCalendar, 'set', Calendar.YEAR, ~~date[0]);
plus.android.invoke(mCalendar, 'set', Calendar.MONTH, ((~~date[1]) - 1));
plus.android.invoke(mCalendar, 'set', Calendar.DATE, ~~date[2]);
plus.android.invoke(mCalendar, 'set', Calendar.HOUR_OF_DAY, ~~date[3]);
plus.android.invoke(mCalendar, 'set', Calendar.MINUTE, ~~date[4]);
var start = plus.android.invoke(plus.android.invoke(mCalendar, 'getTime'), 'getTime');
//设置日历事件
var etimestamp = new Date(etime.replace(/-/g, "\/")).getTime();//时间可以用传入参数的模式
events.put('title', title);
events.put('description', description);
events.put('calendar_id', calId);
events.put('dtstart', start);
events.put('dtend', etimestamp);
//events.put('ALL_DAY', 0); //值为 1 表示此事件占用一整天(按照本地时区的定义)。 值为 0 表示它是常规事件,可在一天内的任何时间开始和结束。
//events.put('RRULE')
events.put('hasAlarm', 1);
events.put('eventTimezone', TimeZone_str);
var newEvent = plus.android.invoke(main.getContentResolver(), 'insert', Uri.parse('content://com.android.calendar/events'), events);
var id = plus.android.invoke(newEvent, 'getLastPathSegment');
if(fr.length > 0) {
var values = new ContentValues();
values.put('event_id', id);
values.put('minutes', fr);
values.put('method', '1');
plus.android.invoke(main.getContentResolver(), 'insert', Uri.parse('content://com.android.calendar/reminders'), values);
}
if(tr.length > 0) {
var values2 = new ContentValues();
values2.put('event_id', id);
values2.put('minutes', tr);
values2.put('method', '1');
plus.android.invoke(main.getContentResolver(), 'insert', Uri.parse('content://com.android.calendar/reminders'), values2);
}
//SaveCalendID(id, Nid, callSetProRmData); 把插入日历的id保存起来,便于删除调用
//也可以用于更新(先删后插入);
} catch(e) {
mui.alert("您没有允许APP访问日历的权限");
}
}
deletecalendar = function(eventID) {
if(userCursor_count <= 0) { //如果没有日历账户
addcalendaraccount();
}
var id = Number(eventID);
//alert(id);
var deleteUri = ContentUris.withAppendedId(Uri.parse(eventsURL), id);
var rows = plus.android.invoke(main.getContentResolver(), "delete", deleteUri, null, null);
if(rows == -1) {
return;
}
}
addcalendaraccount = function() {
var account = new ContentValues(),
buildUpon = plus.android.invoke(Uri.parse(calanderURL), 'buildUpon'),
CalendarContract = plus.android.importClass('android.provider.CalendarContract');
plus.android.invoke(buildUpon, 'appendQueryParameter', CalendarContract.CALLER_IS_SYNCADAPTER, 'true');
plus.android.invoke(buildUpon, 'appendQueryParameter', 'account_name', 'OA@xxx.com.com');
plus.android.invoke(buildUpon, 'appendQueryParameter', 'account_type', 'com.android.exchange');
//设置账户信息
account.put('name', 'OAAppAdmin');
account.put('account_name', 'OA@xxx.com.com');
account.put('account_type', 'com.android.exchange');
account.put('calendar_displayName', 'OA日历');
account.put('visible', 1);
account.put('calendar_color', '-9206951');
account.put('calendar_access_level', '700');
account.put('sync_events', 1);
account.put('calendar_timezone', TimeZone_str);
account.put('ownerAccount', 'OA@xxx.com.com');
account.put('canOrganizerRespond', 0);
//保存账户信息
plus.android.invoke(main.getContentResolver(), 'insert', plus.android.invoke(buildUpon, 'build'), account);
}
});
3 个评论
要回复文章请先登录或注册
FullStack
l***@chinaunicom.cn
h***@126.com (作者)