2012-09-24 22 views
8

Ich habe überall nach Möglichkeiten gesucht, einen neuen Kalender aus einer Android-App heraus zu erstellen. Der einzige Weg, den ich gesehen habe, ist die Verwendung der neuen Kalender-API in der neuesten API-Version, ABER das scheint nur zu funktionieren, wenn Sie CalendarContract.ACCOUNT_TYPE_LOCAL verwenden. Sie können keinen Kalender erstellen, der an das Google-Konto des Nutzers angehängt ist und mit Google Calendar synchronisiert wird. Es erscheint nicht in der Kalenderliste online unter Google Calendar.Android Hinzufügen eines neuen Kalenders

Ich habe versucht, die Kontoart aus dem Konto, aber das funktioniert nicht. Es scheint jedoch keinen Fehler zu erzeugen. Das Ergebnis kommt gut zurück.

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

Hier ist der vollständige Code für einen neuen lokalen Kalender Hinzufügen der Calendar API und SYNCADAPTER (Kontotyp Kommentar gesetzt) ​​verwendet wird. Weiß jemand, ob das, was ich versuche, überhaupt möglich ist?

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

Bitte beantworten Sie Ihre eigene Frage, wenn Ihr Problem gelöst ist. Sie erhalten ein Abzeichen und viele bekommen kostenlose/einfache Hilfe. –

+0

Haben Sie eine Lösung für Ihre Frage? Ich suche nach dem gleichen. BTW gute Frage. –

Antwort

2

Ja, Sie können es tun. Da Sie jedoch einen Kalender erstellen möchten, der mit Ihrem Google-Konto verknüpft ist, benötigen Sie hierfür die Google Kalender-API (für Android-Kalenderanbieter wurde hierfür keine einzige Lösung gefunden). Unten finden Sie Links:

Seien Sie sicher, dass ihre API-Explorer zu überprüfen. Einfache HTTP-Anforderung zum Erstellen neuer Kalender:

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

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

Und es ist RESPONSE:

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

Danach sollten Sie diesen Kalender von Ihrem Android-App verwalten können, mit Kalenderanbieter (nach der Synchronisierung)

+0

Können Sie bitte erläutern? Was ist 'YOUR_API_KEY' in deinem Code? – yshahak

+0

Für die Android API-Authentifizierung wird nur mit [OAuth 2.0] (https://developers.google.com/google-apps/calendar/auth) fortgefahren. Jedenfalls ist der erste [link] (https://developers.google.com/google-apps/calendar/quickstart/android) immer noch gültig und kann Ihnen einen schnellen Start mit Android und Google Kalender API geben. Apropos Einfügen eines neuen Kalenders mit dem API-Check [this] (https://developers.google.com/google-apps/calendar/v3/reference/calendars/insert) – Luke

Verwandte Themen