Android添加新日历

时间:2012-09-24 14:07:06

标签: android api calendar

我已经检查了从Android应用程序中创建新日历的方法。我见过的唯一方法就是在最新的api版本中使用新的Calendar API,但是只有在使用CalendarContract.ACCOUNT_TYPE_LOCAL时这似乎才有效。它不会让您创建附加到用户Google帐户的日历,与Google Calendar同步。它并未出现在Google Calendar的在线日历列表中。

values.put(CalendarContract.Calendars.ACCOUNT_TYPE, 
    CalendarContract.ACCOUNT_TYPE_LOCAL);

我已尝试使用帐户中的帐户类型,但这不起作用。但它似乎没有产生任何错误。结果很好。

values.put(CalendarContract.Calendars.ACCOUNT_TYPE, accountType);

以下是使用Calendar APISYNCADAPTER添加新本地日历的完整代码(帐户类型已注释掉)。有谁知道我尝试做的事情是否可行?

AccountManager manager = AccountManager.get(context);
Account[] accounts = manager.getAccountsByType("com.google");

String accountName = "";
String accountType = "";

for (Account account : accounts) {
    accountName = account.name;
    accountType = account.type;
    break;
}

ContentResolver cr = context.getContentResolver();
ContentValues values = new ContentValues();

values.put(CalendarContract.Calendars.ACCOUNT_NAME, accountName);
//values.put(CalendarContract.Calendars.ACCOUNT_TYPE, accountType);
values.put(CalendarContract.Calendars.ACCOUNT_TYPE, CalendarContract.ACCOUNT_TYPE_LOCAL);
values.put(CalendarContract.Calendars.NAME, DaysSince.CAL_NAME);
values.put(CalendarContract.Calendars.CALENDAR_DISPLAY_NAME, DaysSince.CAL_NAME);
values.put(CalendarContract.Calendars.SYNC_EVENTS, 1);
values.put(CalendarContract.Calendars.VISIBLE, 1);
values.put(CalendarContract.Calendars.CALENDAR_ACCESS_LEVEL, CalendarContract.Calendars.CAL_ACCESS_OWNER);
values.put(CalendarContract.Calendars.OWNER_ACCOUNT, accountName);
values.put(CalendarContract.Calendars.DIRTY, 1);
values.put(CalendarContract.Calendars.CALENDAR_TIME_ZONE, TimeZone.getDefault().getID());

Uri calUri = CalendarContract.Calendars.CONTENT_URI;

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

Uri result = cr.insert(calUri, values);

1 个答案:

答案 0 :(得分:2)

是的,你可以做到。但是,由于您要创建与您的Google帐户关联的日历,因此您需要Google Calendar API(没有找到使用Android日历提供程序执行此操作的单一解决方案)。请查看以下链接:

请务必检查他们的API资源管理器。用于创建新日历的简单 HTTP REQUEST

POST https://www.googleapis.com/calendar/v3/calendars?key={YOUR_API_KEY}

{
 "summary": "My new google calendar"
}

响应

{
 "kind": "calendar#calendar",
 "etag": "__________etag_val_________",
 "id": "______id_goes_here______@group.calendar.google.com",
 "summary": "My new google calendar"
}

之后,您应该能够通过带有日历提供程序的Android应用程序管理此日历(同步后)。