2014-03-29 32 views
1

因此,我使用的是以毫秒为单位的日期,并且能够在特定时间创建通知,但我也希望在用户日历中添加事件。我在这里发现了一些信息http://developer.android.com/guide/topics/providers/calendar-provider.html 但我仍然在努力。例如:我如何获取用户帐户名称?在日历提供程序中创建新事件

编辑: 所以,我发现这一点:

Calendar beginTime = Calendar.getInstance(); 
    beginTime.setTimeInMillis(when); 
    Calendar endTime = Calendar.getInstance(); 
    endTime.setTimeInMillis(when+3600000); 
Intent intent = new Intent(Intent.ACTION_INSERT) 
    .setData(Events.CONTENT_URI) 
    .putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, beginTime.getTimeInMillis()) 
    .putExtra(CalendarContract.EXTRA_EVENT_END_TIME, endTime.getTimeInMillis()) 
    .putExtra(Events.TITLE, "Yoga") 
    .putExtra(Events.DESCRIPTION, "Group class") 
    .putExtra(Events.EVENT_LOCATION, "The gym") 
    .putExtra(Events.AVAILABILITY, Events.AVAILABILITY_BUSY); 
startActivity(intent); 

它适合我,但它会打开一个窗口calentdar确认添加事件。有没有办法避免这种情况?

EDIT2:找到了我一直在寻找:

long calID = 3; 
    ContentResolver cr = getContentResolver(); 
    ContentValues values = new ContentValues(); 
    values.put(Events.DTSTART, when); 
    values.put(Events.DTEND, when+3600000); 
    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"); 
    cr.insert(Events.CONTENT_URI, values); 
+1

欢迎来到stackoverflow.Adding一些代码的问题将增加获得高效答案的机会。 – Daenarys

回答

4

你可以试试这个代码中插入事件到压延

public static long pushEventToCalender(Activity curActivity, 
      String title, String addInfo, String place, int status, 
      long startDate, int reminderTime, boolean needReminder, 
      boolean needMailService) { 
     /***************** Event: note(without alert) *******************/ 

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

     eventValues.put("calendar_id", 1); // id, We need to choose from 
              // our mobile for primary 
              // its 1 
     eventValues.put("title", title); 
     eventValues.put("description", addInfo); 
     eventValues.put("eventLocation", place); 

     long endDate = startDate + 1000 * 60 * 60; // For next 1hr 

     eventValues.put("dtstart", startDate); 
     eventValues.put("dtend", endDate); 

     // 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 
     eventValues.put("eventStatus", status); // This information is 
     // sufficient for most 
     // entries tentative (0), 
     // confirmed (1) or canceled 
     // (2): 
     /* 
     * eventValues.put("visibility", 3); // visibility to default (0), // 
     * confidential (1), private // (2), or public (3): 
     */ 
     // eventValues.put("transparency", 0); // You can control whether 
     // an event consumes time 
     // opaque (0) or transparent 
     // (1). 
     eventValues.put("hasAlarm", 1); // 0 for false, 1 for true 

     eventValues.put("eventTimezone", TimeZone.getDefault().getID()); 
     Uri eventUri = curActivity.getApplicationContext().getContentResolver() 
       .insert(Uri.parse(eventUriString), eventValues); 
     long eventID = Long.parseLong(eventUri.getLastPathSegment()); 

     if (needReminder) { 
      /***************** Event: Reminder(with alert) Adding reminder to event *******************/ 

      String reminderUriString = "content://com.android.calendar/reminders"; 

      ContentValues reminderValues = new ContentValues(); 

      reminderValues.put("event_id", eventID); 
      reminderValues.put("minutes", reminderTime); // Default value of the 
      // system. Minutes is a 
      // integer 
      reminderValues.put("method", 1); // Alert Methods: Default(0), 
               // Alert(1), Email(2), 
               // SMS(3) 

      Uri reminderUri = curActivity.getApplicationContext() 
        .getContentResolver() 
        .insert(Uri.parse(reminderUriString), reminderValues); 
     if(_DEBUG) 
      Log.e("URI", reminderUri.toString()); 
     } 

     /***************** Event: Meeting(without alert) Adding Attendies to the meeting *******************/ 

     if (needMailService) { 
      String attendeuesesUriString = "content://com.android.calendar/attendees"; 

      /******** 
      * To add multiple attendees need to insert ContentValues multiple 
      * times 
      ***********/ 
      ContentValues attendeesValues = new ContentValues(); 

      attendeesValues.put("event_id", eventID); 
      attendeesValues.put("attendeeName", "xxxxx"); // Attendees name 
      attendeesValues.put("attendeeEmail", "[email protected]");// Attendee 
                    // E 
                    // mail 
                    // id 
      attendeesValues.put("attendeeRelationship", 0); // Relationship_Attendee(1), 
                  // Relationship_None(0), 
                  // Organizer(2), 
                  // Performer(3), 
                  // Speaker(4) 
      attendeesValues.put("attendeeType", 0); // None(0), Optional(1), 
                // Required(2), Resource(3) 
      attendeesValues.put("attendeeStatus", 0); // NOne(0), Accepted(1), 
                 // Decline(2), 
                 // Invited(3), 
                 // Tentative(4) 

      Uri attendeuesesUri = curActivity.getApplicationContext() 
        .getContentResolver() 
        .insert(Uri.parse(attendeuesesUriString), attendeesValues); 
      if(_DEBUG) 
       Log.e("URI", attendeuesesUri.toString()); 
     } 

     return eventID; 

    } 

希望这将帮助你

0

尝试以下用于获取日历帐户名称代码,

Uri uri; 
String calName,calId,calAccName,calType; 

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

Cursor cursor = managedQuery(uri, null, null, null, null); //all calendars 

cursor.moveToFirst(); 
while (!cursor.isAfterLast()) 
{ 
    calName = cursor.getString(cursor.getColumnIndex(projection[1])); 
    if(calName.equalsIgnoreCase(clsCommon.CALENDAR_NAME)) 
{ 
    flag= true; 
    calId = cursor.getString(cursor.getColumnIndex(projection[0])); 
    calAccName = cursor.getString(cursor.getColumnIndex(projection[2])); 
    calType = cursor.getString(cursor.getColumnIndex(projection[3])); 
} 
    cursor.moveToNext(); 
} 

编辑

对于添加日历事件日历请尝试以下代码

Uri calUri = CalendarContract.Calendars.CONTENT_URI; 
ContentValues cv = new ContentValues(); 
cv.put(CalendarContract.Calendars.ACCOUNT_NAME, UserName); 
cv.put(CalendarContract.Calendars.ACCOUNT_TYPE, CalendarContract.ACCOUNT_TYPE_LOCAL); 
cv.put(CalendarContract.Calendars.NAME, "NAME"); 
cv.put(CalendarContract.Calendars.CALENDAR_DISPLAY_NAME, "Name"); 
cv.put(CalendarContract.Calendars.CALENDAR_COLOR, getResources().getColor(R.color.app_default)); 
cv.put(CalendarContract.Calendars.CALENDAR_ACCESS_LEVEL, CalendarContract.Calendars.CAL_ACCESS_OWNER); 
cv.put(CalendarContract.Calendars.OWNER_ACCOUNT, true); 
cv.put(CalendarContract.Calendars.VISIBLE, 1); 
cv.put(CalendarContract.Calendars.SYNC_EVENTS, 1); 

calUri = calUri.buildUpon() 
         .appendQueryParameter(CalendarContract.CALLER_IS_SYNCADAPTER, "true") 
         .appendQueryParameter(CalendarContract.Calendars.ACCOUNT_NAME, UserName) 
         .appendQueryParameter(CalendarContract.Calendars.ACCOUNT_TYPE, CalendarContract.ACCOUNT_TYPE_LOCAL).build(); 

getContentResolver().insert(calUri, cv); 
+0

但在你的问题你想要帐户名称,这就是为什么我发布了这个答案。 – Andrain

0

你不需要写所有这些代码,请参见下面的代码它会帮助你,

Calendar beginTime = Calendar.getInstance(); 
beginTime.set(yearInt, monthInt - 1, dayInt, 7, 30); 
ContentValues l_event = new ContentValues(); 
l_event.put("calendar_id", CalIds[0]); 
l_event.put("title", "event"); 
l_event.put("description", "This is test event"); 
l_event.put("eventLocation", "School"); 
l_event.put("dtstart", beginTime.getTimeInMillis()); 
l_event.put("dtend", beginTime.getTimeInMillis()); 
l_event.put("allDay", 0); 
l_event.put("rrule", "FREQ=YEARLY"); 
// status: 0~ tentative; 1~ confirmed; 2~ canceled 
// l_event.put("eventStatus", 1); 

l_event.put("eventTimezone", "India"); 
Uri l_eventUri; 
if (Build.VERSION.SDK_INT >= 8) { 
    l_eventUri = Uri.parse("content://com.android.calendar/events"); 
} else { 
    l_eventUri = Uri.parse("content://calendar/events"); 
} 
Uri l_uri = MainActivity.this.getContentResolver() 
     .insert(l_eventUri, l_event);