2013-02-01 27 views
0

我使用時間表創建時間表。我的問題是,當我需要創建一個新事件時,我通過此代碼調用活動。如何在不查看日曆的情況下調用事件日曆?

public void callEventDialog(int line, int column){ 
    Intent intent = new Intent(Intent.ACTION_EDIT); 
    Calendar c = Calendar.getInstance(); 
    c.setTimeInMillis(startWeek.getTimeInMillis() + column * DIM + line * 30 * 60 * 1000); 
    intent.setType("vnd.android.cursor.item/event"); 
    intent.putExtra(Events.TITLE, "title"); 
    intent.putExtra(Events.DTSTART, c.getTimeInMillis()); 
    intent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, c.getTimeInMillis()); 
    intent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, c.getTimeInMillis() + 1800 * 1000); 
    intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY); 
    startActivityForResult(intent, 100); 
} 

但是,當我點擊確定按鈕,我不想查看日曆活動。我只需要註冊事件而不是日曆,然後離開。我怎麼能做到這一點? 感謝您的時間和幫助

enter image description here

回答

1

如果你想直接將活動添加到日曆,您需要使用內容解析器和請求日曆權限 - 沒有日曆活動時使用。

權限在您的清單:

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

把事件到數據庫的例子:

public static int insertEventToDb(Context context, Event event, int calendarId) { 
    ContentValues values = new ContentValues(); 

    values.put(Events.CALENDAR_ID, calendarId); 
    values.put(Events.TITLE, event.getName()); 
    values.put(Events.EVENT_LOCATION, event.getLocation()); 
    values.put(Events.DTSTART, event.getStartDate().getTime()); 
    values.put(Events.DTEND, event.getEndDate().getTime()); 
    values.put(Events.DESCRIPTION, event.getDescription()); 
    values.put(Events.EVENT_TIMEZONE, TimeZone.getTimeZone("GMT+1").getID()); 

    Uri result = context.getContentResolver().insert(Events.CONTENT_URI, values); 
    int eventId = Integer.valueOf(result.getPathSegments().get(1)); 
    return eventId; 
} 

您還需要你想插入數據到日曆的ID。你可以通過使用SQLite查詢來找到它或者創建你自己的日曆(這應該只能通過SyncAdapter完成)。這是另外一個例子,你可能會需要通過你的需要來修改它(Constants.ACCOUNT_TYPE是我的自定義):

Uri uri = Calendars.CONTENT_URI.buildUpon() 
       .appendQueryParameter(android.provider.CalendarContract.CALLER_IS_SYNCADAPTER, "true") 
       .appendQueryParameter(Calendars.ACCOUNT_NAME, "LOCAL") 
       .appendQueryParameter(Calendars.ACCOUNT_TYPE, Constants.ACCOUNT_TYPE).build(); 
Cursor cursor = context.getContentResolver().query(uri, new String[] {Calendars._ID}, null, null, null); 

你可以找到Android Developers site - Calendar Provider進一步的信息。