2012-09-10 80 views
4

對於我的一個應用程序,我們必須在日曆中插入一個事件。在Android中插入日曆項目ICS

long calID = 3; 
long startMillis = 0; 
long endMillis = 0;  
Calendar beginTime = Calendar.getInstance(); 
beginTime.set(2012, 8, 10, 7, 30); 
startMillis = beginTime.getTimeInMillis(); 
Calendar endTime = Calendar.getInstance(); 
endTime.set(2012, 8, 10, 8, 45); 
endMillis = endTime.getTimeInMillis(); 
ContentResolver cr = getContentResolver(); 
ContentValues values = new ContentValues(); 
values.put(Events.DTSTART, startMillis); 
values.put(Events.DTEND, endMillis); 
values.put(Events.TITLE, "Jazzercise"); 
values.put(Events.DESCRIPTION, "Group workout"); 
values.put(Events.CALENDAR_ID, calID); 
values.put(Events.EVENT_TIMEZONE, "America/Los_Angeles"); 
Uri uri = cr.insert(CalendarContract.Calendars.CONTENT_URI, values); 
// get the event ID that is the last element in the Uri 
long eventID = Long.parseLong(uri.getLastPathSegment()); 
Log.d("MainActivity", "addCalendarEvents :: " + "eventID :: "+eventID); 

Cursor cursor = cr.query(Events.CONTENT_URI, null, Events.TITLE +"='Jazzercise'", null, null); 
Log.d("MainActivity", "addCalendarEvents :: " + "cursor :: "+cursor.getCount()); 

http://developer.android.com/guide/topics/providers/calendar-provider.html 。然而,首先,它給了我一個錯誤

Failed to get type for: content://com.android.calendar (Unknown URL content://com.android.calendar) 

而且光標計數爲零。當我嘗試用標題進行搜索時。 注:我嘗試使用intents服務來添加事件,但是我不想讓用戶在添加事件時自行決定。

我已經在Galaxy Nexus(4.1)和Nexus S(4.1)上測試過它。

任何與ICS一起使用的正確UI的幫助?

BR, Jayshil

+0

注:我沒有得到明確的崩潰或錯誤。 –

+0

如果開發者社區的人在4.0 ICS設備中嘗試這樣做,那真的很有幫助。如果它是一個Jellybean問題或4.0以上的問題。 –

+2

這個錯誤出現在糖果豆更新後,我有一個nexus 7相同的問題。在ICS上,我的代碼正常工作,更新後停止,logcat報告您引用的行。然後它提供了com.google.android.calendar作爲替代,但如果我在我的代碼中替換它,這仍然不起作用。 –

回答

3

我已經想通了。行:

Failed to get type for: content://com.android.calendar (Unknown URL content://com.android.calendar) 

是一個完整的紅鯡魚(即不相關)。這只是執行基礎架構工作的一些框架代碼,as seen here


問題就出在文檔中 - 如果你像我一樣,你可能期望long calID = 3;是一些有效的日曆ID。 這不是一個有效的ID,它是一個佔位符,用於文檔

如果您使用的是空白模擬器,您將如何處理上述代碼,將條目插入到不存在的日曆中,即無法看到。

你需要做的是:

  1. Query for and choose an existing calendar。再次 - 模擬器上的,沒有默認日曆
  2. 使用獲取的實際日曆ID插入事件。

簡而言之 - 文檔和調試消息不足以防止白癡;)。

+1

喜歡最後一行..我剛剛找到相同的解決方案几天回來..並必須交給你... –

+1

之間的最新文檔是好得多..他們首先讓你查詢日曆,然後顯示如何插入。 –

0

你有沒有在清單文件正確的權限?

<uses-permission android:name="android.permission.READ_CALENDAR" /> 
<uses-permission android:name="android.permission.WRITE_CALENDAR" /> 

這可能是您看到的錯誤原因的一部分。

+0

是的,我有這些權限。 –

0
content://com.android.calendar - problem is here. 

它的壓光機。

嘗試使用此代碼:

Uri mCalendarsUri; 
if (Build.VERSION.SDK_INT >= 8) { 
    mCalendarsUri = Uri.parse("content://com.android.calendar/calendars"); 
} else { 
    mCalendarsUri = Uri.parse("content://calendar/calendars"); 
}