2012-09-24 4 views
8

J'ai vérifié partout comment créer un nouveau calendrier à partir d'une application Android. La seule façon que j'ai vu est l'utilisation de la nouvelle API de calendrier dans la dernière version de l'API, mais cela ne semble fonctionner que si vous utilisez CalendarContract.ACCOUNT_TYPE_LOCAL. Il ne vous permettra pas de créer un calendrier attaché au compte Google des utilisateurs, synchronisé avec Google Calendar. Il n'apparaît pas dans la liste de calendrier en ligne au Google Calendar. J'ai essayé d'utiliser le type de compte du compte, mais cela ne fonctionne pas. Il ne semble pas produire d'erreur cependant. Le résultat revient bien.Android Ajouter un nouveau calendrier

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

Voici le code complet pour ajouter un nouveau calendrier local en utilisant le (type de compte commenté) Calendar API et SYNCADAPTER. Est-ce que quelqu'un sait si ce que j'essaie de faire est même possible?

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

Veuillez répondre à votre question, si votre problème est résolu. Vous obtiendrez un badge et beaucoup recevront une aide gratuite. –

+0

Avez-vous une solution à votre question? Je cherche la même chose. BTW bonne question. –

Répondre

2

Oui, vous pouvez le faire. Mais puisque vous voulez créer un calendrier lié à votre compte google, vous avez besoin de l'API Google Calendar pour cela (vous n'avez pas trouvé de solution unique pour cela avec Android Calendar Provider). Consultez ci-dessous les liens:

Assurez-vous de vérifier leur API explorer. Simple HTTP DEMANDE pour la création de nouveau calendrier:

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

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

Et c'est RÉPONSE:

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

Après cela, vous devriez être en mesure de gérer ce calendrier à partir de votre application Android avec Fournisseur de calendrier (après synchronisation).

+0

Pouvez-vous élaborer s'il vous plaît? Qu'est-ce que 'YOUR_API_KEY' dans votre code? – yshahak

+0

Pour l'authentification de l'API Android, uniquement avec [OAuth 2.0] (https://developers.google.com/google-apps/calendar/auth). De toute façon, le 1er [link] (https://developers.google.com/google-apps/calendar/quickstart/android) est toujours valide et peut vous permettre de démarrer rapidement avec Android et Google Calendar API. En parlant de l'insertion d'un nouveau calendrier avec leur API, cochez [this] (https://developers.google.com/google-apps/calendar/v3/reference/calendars/insert) – Luke

Questions connexes