我在向Android日历添加事件时遇到问题。 我的最低SDK版本是7.我使用Intent来添加事件,但问题在于各种API。 我用这个:
String eventUriString;
if (Build.VERSION.SDK_INT > 7)
eventUriString = "content://com.android.calendar/events";
else eventUriString = "content://calendar/events";
ContentValues eventValues = new ContentValues();
eventValues.put("calendar_id", 1);
eventValues.put("title", "title");
eventValues.put("description", desc);
eventValues.put("eventLocation", "");
long endDate = startDate + 1000 * 60 * 60;
eventValues.put("dtstart", MyClass.getDate());
eventValues.put("dtend", endDate);
eventValues.put("eventStatus", 0);
eventValues.put("visibility", 2);
eventValues.put("transparency", 0);
eventValues.put("hasAlarm", 0);
Uri eventUri = context.getContentResolver().insert(Uri.parse(eventUriString), eventValues);
long eventID = Long.parseLong(eventUri.getLastPathSegment());
编辑我使用的一些事件:
String calendarUriBase = null;
long id = MyEvents.getID(p); //something ID from my another class
Uri calendars = Uri.parse("content://calendar/calendars");
Cursor managedCursor = null;
try {
managedCursor = managedQuery(calendars, null, null, null, null);
} catch (Exception e) {
// eat
}
if (managedCursor != null) {
calendarUriBase = "content://calendar/";
} else {
calendars = Uri.parse("content://com.android.calendar/calendars");
try {
managedCursor = managedQuery(calendars, null, null, null, null);
} catch (Exception e) {
// eat
}
if (managedCursor != null) {
calendarUriBase = "content://com.android.calendar/";
}
}
ContentValues event = new ContentValues();
event.put("title", "new Title");
Uri eventsUri = Uri.parse(calendarUriBase+"events");
Uri eventUri = ContentUris.withAppendedId(eventsUri, id);
getContentResolver().update(eventUri, event, null, null);
它可以在我的手机上运行(SE X8与Android 2.3.7),但在SDK 14上不起作用。
我可以使用任何通用代码将日历Android添加到各种各样的SDK吗?我不知道它是如何制作的。我必须使用API 7,因为我的经理想要。你有什么想法吗?
答案 0 :(得分:10)
在ICS中引入了新的Calendar API,因此您的代码将无法在ICS中运行。 New Public APIs in ICS
为了支持向所有日历添加事件,您可以像这样更改代码 -
if (Build.VERSION.SDK_INT >= 14) {
saveCalendarEventICS();
}
else {
int cal_id = getCalendar_ID();
if(cal_id != 0){
saveCalendarEvent(cal_id);
}
}
private int getCalendar_ID() {
// TODO Auto-generated method stub
int calendar_id = 0;
String[] projection = new String[] { "_id", "name" };
String selection = "selected=1";
String path = "calendars";
Cursor calendarCursor = getCalendarCursor(projection, selection, path);
if (calendarCursor != null && calendarCursor.moveToFirst()) {
int nameColumn = calendarCursor.getColumnIndex("name");
int idColumn = calendarCursor.getColumnIndex("_id");
do {
String calName = calendarCursor.getString(nameColumn);
String calId = calendarCursor.getString(idColumn);
if (calName != null /*&& calName.contains("Test")*/) {
calendar_id = Integer.parseInt(calId);
}
} while (calendarCursor.moveToNext());
}
return calendar_id;
}
private void saveCalendarEventICS() {
Intent intent = new Intent(Intent.ACTION_INSERT)
.setType("vnd.android.cursor.item/event")
.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, frsttime)
.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, sncdtime)
.putExtra(CalendarContract.EXTRA_EVENT_ALL_DAY , false) // just included for completeness
.putExtra(Events.TITLE, vl_hldr[0])
.putExtra(Events.DESCRIPTION, vl_hldr[2])
.putExtra(Events.EVENT_LOCATION, vl_hldr[1])
.putExtra(Events.RRULE, "FREQ=DAILY;COUNT=10")
.putExtra(Events.AVAILABILITY, Events.AVAILABILITY_BUSY)
.putExtra(Events.ACCESS_LEVEL, Events.ACCESS_PRIVATE)
.putExtra(Events.ALLOWED_REMINDERS, "METHOD_DEFAULT")
.putExtra(Intent.EXTRA_EMAIL, "");
startActivity(intent);
}
private void saveCalendarEvent(int calid) {
// TODO Auto-generated method stub
//Create the event here -----------
Uri newEvent;
if (Build.VERSION.SDK_INT >= 8) {
//newEvent = Uri.parse("content://com.android.calendar/events");
newEvent = ctx.getContentResolver().insert(Uri.parse("content://com.android.calendar/events"), event);
if (newEvent != null) {
long id = Long.parseLong( newEvent.getLastPathSegment() );
ContentValues values = new ContentValues();
values.put( "event_id", id );
values.put( "method", 1 );
values.put( "minutes", 15 ); // 15 minuti
getContentResolver().insert( Uri.parse( "content://com.android.calendar/reminders" ), values );
}
}
else {
newEvent = ctx.getContentResolver().insert(Uri.parse("content://calendar/events"), event);
if (newEvent != null) {
long id = Long.parseLong( newEvent.getLastPathSegment() );
ContentValues values = new ContentValues();
values.put( "event_id", id );
values.put( "method", 1 );
values.put( "minutes", 15 ); // 15 minuti
getContentResolver().insert( Uri.parse( "content://calendar/reminders" ), values );
}
}
}catch(Exception ee){}
}