将上诉代码生成一个工具类
时间: 2024-03-13 10:47:59 浏览: 55
代码工具类
好的,以下是一个将事件添加到日历并设置提醒和自定义铃声的工具类:
```
public class CalendarHelper {
private static final String[] EVENT_PROJECTION = new String[]{
CalendarContract.Calendars._ID,
CalendarContract.Calendars.ACCOUNT_NAME,
CalendarContract.Calendars.CALENDAR_DISPLAY_NAME,
CalendarContract.Calendars.OWNER_ACCOUNT
};
private static final int PROJECTION_ID_INDEX = 0;
/**
* 添加事件到日历
*
* @param context 上下文对象
* @param title 事件标题
* @param description 事件描述
* @param startTime 事件开始时间
* @param endTime 事件结束时间
* @param reminder 事件提醒时间(单位:分钟)
* @param customRing 是否设置自定义铃声
* @param packageName 自定义铃声应用程序的包名
* @param customUri 自定义铃声的 URI
* @return 添加的事件的 URI
*/
public static Uri addEventToCalendar(Context context, String title, String description, long startTime, long endTime, int reminder, boolean customRing, String packageName, Uri customUri) {
try {
// 获取日历 ID
long calID = getCalendarId(context);
// 添加事件到日历
ContentResolver cr = context.getContentResolver();
ContentValues values = new ContentValues();
values.put(CalendarContract.Events.DTSTART, startTime);
values.put(CalendarContract.Events.DTEND, endTime);
values.put(CalendarContract.Events.TITLE, title);
values.put(CalendarContract.Events.DESCRIPTION, description);
values.put(CalendarContract.Events.CALENDAR_ID, calID);
values.put(CalendarContract.Events.EVENT_TIMEZONE, TimeZone.getDefault().getID());
Uri uri = cr.insert(CalendarContract.Events.CONTENT_URI, values);
// 添加提醒
if (reminder > 0) {
ContentValues reminderValues = new ContentValues();
reminderValues.put(CalendarContract.Reminders.EVENT_ID, Long.parseLong(uri.getLastPathSegment()));
reminderValues.put(CalendarContract.Reminders.MINUTES, reminder);
reminderValues.put(CalendarContract.Reminders.METHOD, CalendarContract.Reminders.METHOD_ALERT);
cr.insert(CalendarContract.Reminders.CONTENT_URI, reminderValues);
}
// 设置自定义铃声
if (customRing) {
values.put(CalendarContract.Events.HAS_ALARM, true);
values.put(CalendarContract.Events.ALARM_TIME, startTime);
values.put(CalendarContract.Events.CUSTOM_APP_PACKAGE, packageName);
values.put(CalendarContract.Events.CUSTOM_APP_URI, customUri.toString());
cr.update(uri, values, null, null);
}
return uri;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 获取日历 ID
*
* @param context 上下文对象
* @return 日历 ID
*/
private static long getCalendarId(Context context) {
Cursor cursor = context.getContentResolver().query(CalendarContract.Calendars.CONTENT_URI, EVENT_PROJECTION, CalendarContract.Calendars.VISIBLE + " = 1", null, CalendarContract.Calendars._ID + " ASC");
if (cursor != null && cursor.moveToFirst()) {
return cursor.getLong(PROJECTION_ID_INDEX);
} else {
return -1;
}
}
}
```
使用方法:调用 `addEventToCalendar()` 方法即可将事件添加到日历并设置提醒和自定义铃声。其中,`customRing` 参数表示是否设置自定义铃声,如果设置为 `true`,则需要传入自定义铃声应用程序的包名和自定义铃声的 URI。
希望对您有所帮助!
阅读全文