Android 插入日程到系统日历要注意的3点

第一:由于各个手机的系统不一样,所以在对系统日历的账户进行操作的时候,一定要找到拥有最高权限的账户对其进行插入日程,否则有可能造成将日程插入系统日历之后有可能不出现删除按钮。

// 由于各个系统的账户多而且权限不一样,所以对权限进行升序排列查询,以便向最高权限的用户对日程进行CRUD的操作
Cursor userCursor = mContext.getContentResolver().query(Uri.parse(calanderURL), null, null,
        null, CalendarContract.Calendars.CALENDAR_ACCESS_LEVEL + " ASC "); // 升序排列);
if (null != userCursor && userCursor.getCount() > 0) {
    userCursor.moveToLast();  //注意:开发者可以根据需要改变添加事件的账户
    calId = userCursor.getString(userCursor.getColumnIndex("_id"));
} else {
    initCalendars();
    calId = userCursor.getString(userCursor.getColumnIndex("_id"));
}
userCursor.close();
第二:对于重复事件和非重复事件,大家都知道 DTEND;和DURATION不能同时设置的。

对于非重复事件:

event.put(CalendarContract.Events.DTEND, schedule.getEndTime().getTime());
event.put(CalendarContract.Events.DURATION, (byte[]) null);
对于非重复事件:

event.put(CalendarContract.Events.DURATION, duration);
event.put(CalendarContract.Events.DTEND, (byte[]) null);

第三:当将修改之后的日程插入到系统日历的时候,使用update方法的时候,要记得要另外对提醒时间进行update,因为日程的uri和提醒时间的uri是不一样的。而且这是两张不同的表。

对日程的update:

mContext.getContentResolver().update(Uri.parse(calanderEventURL), event,
        "_id=?", new String[]{scheduleId});
对提醒时间的update:

mContext.getContentResolver().update(Uri.parse(calanderRemiderURL), values, CalendarContract.Reminders._ID + "=?", new String[]{scheduleId});

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要在 Android Studio 中将日程添加系统日历中,可以按照以下步骤操作: 1. 添加日历权限: 在应用程序的 `AndroidManifest.xml` 文件中添加 `WRITE_CALENDAR` 权限。例如: ```xml <uses-permission android:name="android.permission.WRITE_CALENDAR" /> ``` 2. 创建日历事件: 在需要添加日历事件的地方,使用以下代码创建日历事件: ```java ContentResolver cr = getContentResolver(); ContentValues values = new ContentValues(); values.put(CalendarContract.Events.DTSTART, startMillis); values.put(CalendarContract.Events.DTEND, endMillis); values.put(CalendarContract.Events.TITLE, "My Event"); values.put(CalendarContract.Events.DESCRIPTION, "Description of my event"); values.put(CalendarContract.Events.CALENDAR_ID, 1); values.put(CalendarContract.Events.EVENT_TIMEZONE, TimeZone.getDefault().getID()); Uri uri = cr.insert(CalendarContract.Events.CONTENT_URI, values); long eventId = Long.parseLong(uri.getLastPathSegment()); ``` 其中 `startMillis` 和 `endMillis` 分别是事件的开始时间和结束时间,可以使用 `Calendar` 类的 `getTimeInMillis()` 方法将日期转换为毫秒数。`CALENDAR_ID` 是日历账户的 ID,可以使用 `CalendarContract.Calendars` 表查询获得。`EVENT_TIMEZONE` 是事件的时区,可以使用 `TimeZone.getDefault().getID()` 获取本地时区。 3. 添加提醒: 如果需要为日历事件添加提醒,可以使用以下代码: ```java int minutes = 60; ContentValues reminderValues = new ContentValues(); reminderValues.put(CalendarContract.Reminders.MINUTES, minutes); reminderValues.put(CalendarContract.Reminders.EVENT_ID, eventId); reminderValues.put(CalendarContract.Reminders.METHOD, CalendarContract.Reminders.METHOD_ALERT); cr.insert(CalendarContract.Reminders.CONTENT_URI, reminderValues); ``` 其中 `minutes` 是提醒的时间,单位为分钟。`METHOD_ALERT` 表示使用默认的提醒方式,可以根据需要使用其他方式。 以上就是在 Android Studio 中将日程添加系统日历的基本步骤。需要注意的是,要测试此功能,需要在真机上测试,因为模拟器默认没有日历应用。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值