1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174
| package com.guoshikeji.calendar.utils;
import android.content.ContentUris; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.graphics.Color; import android.net.Uri; import android.provider.CalendarContract; import android.text.TextUtils;
import java.util.Calendar; import java.util.TimeZone;
/** * Created by tyl * 2018/11/20/020 * Describe:往本地日历插入事件 */
public class CalendarReminderUtils {
private static String CALENDER_URL = "content://com.android.calendar/calendars"; private static String CALENDER_EVENT_URL = "content://com.android.calendar/events"; private static String CALENDER_REMINDER_URL = "content://com.android.calendar/reminders";
private static String CALENDARS_NAME = "boohee"; private static String CALENDARS_ACCOUNT_NAME = "BOOHEE@boohee.com"; private static String CALENDARS_ACCOUNT_TYPE = "com.android.boohee"; private static String CALENDARS_DISPLAY_NAME = "BOOHEE账户";
/** * 检查是否已经添加了日历账户,如果没有添加先添加一个日历账户再查询 * 获取账户成功返回账户id,否则返回-1 */ private static int checkAndAddCalendarAccount(Context context) { int oldId = checkCalendarAccount(context); if( oldId >= 0 ){ return oldId; }else{ long addId = addCalendarAccount(context); if (addId >= 0) { return checkCalendarAccount(context); } else { return -1; } } } /** * 检查是否存在现有账户,存在则返回账户id,否则返回-1 */ private static int checkCalendarAccount(Context context) { Cursor userCursor = context.getContentResolver().query(Uri.parse(CALENDER_URL), null, null, null, null); try { if (userCursor == null) { //查询返回空值 return -1; } int count = userCursor.getCount(); if (count > 0) { //存在现有账户,取第一个账户的id返回 userCursor.moveToFirst(); return userCursor.getInt(userCursor.getColumnIndex(CalendarContract.Calendars._ID)); } else { return -1; } } finally { if (userCursor != null) { userCursor.close(); } } }
/** * 添加日历账户,账户创建成功则返回账户id,否则返回-1 */ private static long addCalendarAccount(Context context) { TimeZone timeZone = TimeZone.getDefault(); ContentValues value = new ContentValues(); value.put(CalendarContract.Calendars.NAME, CALENDARS_NAME); value.put(CalendarContract.Calendars.ACCOUNT_NAME, CALENDARS_ACCOUNT_NAME); value.put(CalendarContract.Calendars.ACCOUNT_TYPE, CALENDARS_ACCOUNT_TYPE); value.put(CalendarContract.Calendars.CALENDAR_DISPLAY_NAME, CALENDARS_DISPLAY_NAME); value.put(CalendarContract.Calendars.VISIBLE, 1); value.put(CalendarContract.Calendars.CALENDAR_COLOR, Color.BLUE); value.put(CalendarContract.Calendars.CALENDAR_ACCESS_LEVEL, CalendarContract.Calendars.CAL_ACCESS_OWNER); value.put(CalendarContract.Calendars.SYNC_EVENTS, 1); value.put(CalendarContract.Calendars.CALENDAR_TIME_ZONE, timeZone.getID()); value.put(CalendarContract.Calendars.OWNER_ACCOUNT, CALENDARS_ACCOUNT_NAME); value.put(CalendarContract.Calendars.CAN_ORGANIZER_RESPOND, 0);
Uri calendarUri = Uri.parse(CALENDER_URL); calendarUri = calendarUri.buildUpon() .appendQueryParameter(CalendarContract.CALLER_IS_SYNCADAPTER, "true") .appendQueryParameter(CalendarContract.Calendars.ACCOUNT_NAME, CALENDARS_ACCOUNT_NAME) .appendQueryParameter(CalendarContract.Calendars.ACCOUNT_TYPE, CALENDARS_ACCOUNT_TYPE) .build();
Uri result = context.getContentResolver().insert(calendarUri, value); long id = result == null ? -1 : ContentUris.parseId(result); return id; } /** * 添加日历事件 */ public static void addCalendarEvent(Context context, String title, String description, long reminderTime, int previousDate) { if (context == null) { return; } int calId = checkAndAddCalendarAccount(context); //获取日历账户的id if (calId < 0) { //获取账户id失败直接返回,添加日历事件失败 return; }
//添加日历事件 Calendar mCalendar = Calendar.getInstance(); mCalendar.setTimeInMillis(reminderTime);//设置开始时间 long start = mCalendar.getTime().getTime(); mCalendar.setTimeInMillis(start + 10 * 60 * 1000);//设置终止时间,开始时间加10分钟 long end = mCalendar.getTime().getTime(); ContentValues event = new ContentValues(); event.put("title", title); event.put("description", description); event.put("calendar_id", calId); //插入账户的id event.put(CalendarContract.Events.DTSTART, start); event.put(CalendarContract.Events.DTEND, end); event.put(CalendarContract.Events.HAS_ALARM, 1);//设置有闹钟提醒 event.put(CalendarContract.Events.EVENT_TIMEZONE, "Asia/Shanghai");//这个是时区,必须有 Uri newEvent = context.getContentResolver().insert(Uri.parse(CALENDER_EVENT_URL), event); //添加事件 if (newEvent == null) { //添加日历事件失败直接返回 return; } //事件提醒的设定 ContentValues values = new ContentValues(); values.put(CalendarContract.Reminders.EVENT_ID, ContentUris.parseId(newEvent)); values.put(CalendarContract.Reminders.MINUTES, previousDate * 24 * 60);// 提前previousDate天有提醒 values.put(CalendarContract.Reminders.METHOD, CalendarContract.Reminders.METHOD_ALERT); Uri uri = context.getContentResolver().insert(Uri.parse(CALENDER_REMINDER_URL), values); if(uri == null) { //添加事件提醒失败直接返回 return; } }
/** * 删除日历事件 */ public static void deleteCalendarEvent(Context context,String title) { if (context == null) { return; } Cursor eventCursor = context.getContentResolver().query(Uri.parse(CALENDER_EVENT_URL), null, null, null, null); try { if (eventCursor == null) { //查询返回空值 return; } if (eventCursor.getCount() > 0) { //遍历所有事件,找到title跟需要查询的title一样的项 for (eventCursor.moveToFirst(); !eventCursor.isAfterLast(); eventCursor.moveToNext()) { String eventTitle = eventCursor.getString(eventCursor.getColumnIndex("title")); if (!TextUtils.isEmpty(title) && title.equals(eventTitle)) { int id = eventCursor.getInt(eventCursor.getColumnIndex(CalendarContract.Calendars._ID));//取得id Uri deleteUri = ContentUris.withAppendedId(Uri.parse(CALENDER_EVENT_URL), id); int rows = context.getContentResolver().delete(deleteUri, null, null); if (rows == -1) { //事件删除失败 return; } } } } } finally { if (eventCursor != null) { eventCursor.close(); } } } }
|