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);
Responda su propia pregunta, si su problema está resuelto. Obtendrá una insignia y muchos recibirán ayuda gratis/fácil. –
¿Tiene alguna solución para su pregunta? Estoy buscando lo mismo. Por cierto, buena pregunta. –