2012-09-24 42 views
8

我已经全面检查了从Android应用内创建新日历的方法。我见过的唯一方法是在最新的api版本中使用新的Calendar API,但是这似乎只适用于CalendarContract.ACCOUNT_TYPE_LOCAL。它不会让您创建附加到用户Google帐户的日历,并与Google Calendar同步。它不会在Google Calendar的在线日历列表中显示。Android添加新日历

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); 
+0

如果你的问题解决了,请回答你自己的问题。你会得到一个徽章,许多人将获得免费/简单的帮助。 –

+0

你有问题的解决方案吗?我正在寻找相同的。顺便说一句好的问题。 –

回答

2

是的,你可以做到这一点。但是,由于您希望创建与您的Google帐户关联的日历,因此您需要Google Calendar API才能使用此功能(在Android日历提供程序中找不到此解决方案)。检查下面的链接:

一定要检查他们的API浏览器。创建新的日历简单HTTP请求

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

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

而且这响应

{ 
"kind": "calendar#calendar", 
"etag": "__________etag_val_________", 
"id": "[email protected]", 
"summary": "My new google calendar" 
} 

之后,你应该能够从Android应用程序与管理这个日历日历提供者(在同步之后)。

+0

请你详细说明一下吗?代码中的'YOUR_API_KEY'是什么? – yshahak

+0

对于Android API身份验证仅适用于[OAuth 2.0](https://developers.google.com/google-apps/calendar/auth)。无论如何,第1 [link](https://developers.google.com/google-apps/calendar/quickstart/android)仍然有效,可以让您快速入门Android和Google Calendar API。说到用他们的API检查插入新日历[this](https://developers.google.com/google-apps/calendar/v3/reference/calendars/insert) – Luke