2010-06-23 43 views
3

我的目标是读写日历。阅读和写日历

我能够从内容读取数据://日历/日历和内容://日历/事件

String uriString = "content://calendar/calendars"; 
    Log.i("INFO", "Reading content from " + uriString); 
    readContent(uriString); 
    uriString = "content://calendar/events"; 
    Log.i("INFO", "Reading content from " + uriString); 
    readContent(uriString); 

private void readContent(String uriString) { 

    Uri uri = Uri.parse(uriString); 
    Cursor cursor = mContext.getContentResolver().query(uri, null, null, 
    null, null); 
    if (cursor != null && cursor.getCount() > 0) { 
    cursor.moveToFirst(); 
    String columnNames[] = cursor.getColumnNames(); 
    String value = ""; 
    String colNamesString = ""; 
    do { 
    value = ""; 

    for (String colName : columnNames) { 
    value += colName + " = "; 
    value += cursor.getString(cursor.getColumnIndex(colName)) 
     + " ||"; 
    } 

    Log.e("INFO : ", value); 
    } while (cursor.moveToNext()); 

    } 

} 

我也是在日历中插入新的记录,如:

String calUriString = "content://calendar/calendars"; 
    ContentValues values = new ContentValues(); 
    values.put("name", "Code Generate Calendar"); 
    values.put("displayName", "Code Generate Calendar"); 
    values.put("hidden", 0); 
    values.put("color", "-7581685"); 
    values.put("access_level", "700"); 
    values.put("selected", "1"); 
    values.put("timezone", "Asia/Karachi"); 

    Uri calendarUri = context.getContentResolver().insert(
    Uri.parse(calUriString), values); 

但它没有出现在日历中。

当我要在日历中插入新的事件,如:

ContentValues values = new ContentValues(); 
    values.put("calendar_id", 4); 
    values.put("dtend", "1277337600000"); 
    values.put("dtstart", "1277251200000"); 
    // values.put("title", "first TEst event"); 
    values.put("transparency", 1); 
    values.put("selected", 1); 
    values.put("color", "-16380578"); 
    // values.put("lastDate", "6/25/2010"); 
    //values.put("access_level", 700); 
    values.put("eventStatus", 1); 
    values.put("eventTimezone", "UTC"); 
    values.put("timezone", "Asia/Karachi"); 
    values.put("allDay", 1); 
    String eventUriString = "content://calendar/events"; 
    Uri eventUri = context.getContentResolver().insert(
    Uri.parse(eventUriString), values); 

抛出异常列是无效的。

这怎么可能。 谢谢

+0

这里的教程,以添加单发生的事件来日历[将单一事件添加到日历](http://www.developer.com/ws/article.php/3850276/Working-with-the-Android-Calendar.htm) – agiles 2012-01-07 09:35:59

回答

0

//要为Android 2.2,如果小于2.2,而不是上面的内容中插入事件压延://com.android.calendar写的内容://日历

String calUriString = "content://com.android.calendar/events"; 
      ContentValues values = new ContentValues(); 

values.put("calendar_id",2); //id, We need to choose from our mobile for primary its 1 
values.put("title", "Birthday"); 
values.put("description", "Go home at 2pm"); 
values.put("eventLocation", "Home"); 
long startTime = System.currentTimeMillis() + 1000 * 60 * 60*24; // Next day 

values.put("dtstart", startTime); 
values.put("dtend", startTime); 

values.put("allDay", 1); //If it is bithday alarm or such kind (which should remind me for whole day) 0 for false, 1 for true 

values.put("eventStatus", 1); // This information is sufficient for most entries tentative (0), confirmed (1) or canceled (2): 

values.put("visibility", 3); // visibility to default (0), confidential (1), private (2), or public (3): 

values.put("transparency", 0); // You can control whether an event consumes time opaque (0) or transparent (1). 

values.put("hasAlarm", 1); // 0 for false, 1 for true 


Uri calendarUri = getApplicationContext().getContentResolver().insert(Uri.parse(calUriString), values); 
0

日期已经过去了第一个问题。而今天,日历内容提供商似乎已经有了很好的文档。 (可能是因为API 14?)

对于例外情况的简短答案是您给列和期望类型的差异。 (长预计为dtstart而不是字符串)

http://developer.android.com/reference/android/provider/CalendarContract.EventsColumns.html#DTSTART

欲了解更多信息,对developer.android.com其他资源: http://developer.android.com/guide/topics/providers/calendar-provider.html