2012-09-24 30 views
8

He revisado todas las formas de crear un nuevo calendario desde una aplicación de Android. La única forma que he visto es usar la nueva API de Calendar en la última versión de la API, PERO esto parece funcionar solo si usa CalendarContract.ACCOUNT_TYPE_LOCAL. No le permitirá crear un calendario adjunto a la cuenta de Google de los usuarios, sincronizado con Google Calendar. No aparece en la lista de calendario en línea en Google Calendar.Android Agregar un nuevo calendario

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

He intentado utilizar el tipo de cuenta de la Cuenta, pero esto no funciona. Sin embargo, no parece producir ningún error. El resultado vuelve bien.

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

Aquí está el código completo para la adición de un nuevo calendario local con el (tipo de cuenta como comentario) Calendar API y SYNCADAPTER. ¿Alguien sabe si lo que estoy tratando de hacer es posible?

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

Responda su propia pregunta, si su problema está resuelto. Obtendrá una insignia y muchos recibirán ayuda gratis/fácil. –

+0

¿Tiene alguna solución para su pregunta? Estoy buscando lo mismo. Por cierto, buena pregunta. –

Respuesta

2

Sí, puedes hacerlo. Pero dado que desea crear un calendario vinculado con su cuenta de Google, necesita la API de Google Calendar para esto (no encontró una sola solución para hacer esto con el proveedor de calendario de Android). Compruebe a continuación los enlaces:

Asegúrese de revisar su explorador de API. Sencilla petición HTTP para crear nuevo calendario:

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

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

Y es RESPUESTA:

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

Después de que usted debe ser capaz de gestionar este calendario de su aplicación para Android con Proveedor de calendario (después de la sincronización).

+0

¿Puedes elaborarlo por favor? ¿Qué es 'YOUR_API_KEY' en tu código? – yshahak

+0

Para Android, la autenticación de la API solo se realiza con [OAuth 2.0] (https://developers.google.com/google-apps/calendar/auth). De todos modos, el primer [enlace] (https://developers.google.com/google-apps/calendar/quickstart/android) sigue siendo válido y puede darle un comienzo rápido con Android y Google Calendar API. Hablando de insertar un nuevo calendario con su API, compruebe [esto] (https://developers.google.com/google-apps/calendar/v3/reference/calendars/insert) – Luke

Cuestiones relacionadas