0

Я пытаюсь создать календарь с помощью кода из this topicProgrommatically создан календарь не спас

private static void createCalendar(Context mContext, Account account) 
{ 
    final ContentValues v = new ContentValues(); 
    v.put(CalendarContract.Calendars.NAME,"TEST"); 
    v.put(CalendarContract.Calendars.CALENDAR_DISPLAY_NAME, "TEST"); 
    v.put(CalendarContract.Calendars.ACCOUNT_NAME, account.name); 
    v.put(CalendarContract.Calendars.ACCOUNT_TYPE, account.type); 
    v.put(CalendarContract.Calendars.CALENDAR_COLOR, Color.GREEN); 
    v.put(CalendarContract.Calendars.CALENDAR_ACCESS_LEVEL, CalendarContract.Calendars.CAL_ACCESS_OWNER); 
    v.put(CalendarContract.Calendars.OWNER_ACCOUNT, account.name); 
    // v.put(CalendarContract.Calendars._ID, 123); 
    v.put(CalendarContract.Calendars.SYNC_EVENTS, 1); 
    v.put(CalendarContract.Calendars.VISIBLE, 1); 
    Uri creationUri = asSyncAdapter(CalendarContract.Calendars.CONTENT_URI, account.name, account.type); 
    Uri calendarData = mContext.getContentResolver().insert(creationUri, v); 
    long id = Long.parseLong(calendarData.getLastPathSegment()); 
} 
private static Uri asSyncAdapter(Uri uri, String account, String accountType) 
{ 
    return uri.buildUpon().appendQueryParameter(CalendarContract.CALLER_IS_SYNCADAPTER, "true").appendQueryParameter 
      (CalendarContract.Calendars.ACCOUNT_NAME,account) 
      .appendQueryParameter(CalendarContract.Calendars.ACCOUNT_TYPE, accountType) .build(); 

} 

, а затем сделать вызов:

createCalendar(c, AccountManager.get(c).getAccountsByType("com.google")[0]); // i've checked - it's correct account to add calendar 

Тогда я retrive данные ContentResolver

final ContentResolver cr = ctx.getContentResolver(); 
    Cursor cursor ; 
    cursor = cr.query(Uri.parse("content://com.android.calendar/calendars"),null, null, null, null); 

и увидеть новый календарь в курсоре. Но:

  • не появляется в Google accound

  • удаляет через некоторое время (думаю, из-за синхронизации)

протестирован на 5.1.1

Как может Я создаю календарь на свой счет прогромно?

ответ

1

Попробуйте использовать calendar.insert для создания другого календаря.

Поскольку вы используете Java, я думаю, что этот фрагмент кода может быть полезен:

import com.google.api.services.calendar.Calendar; 

// ... 

// Initialize Calendar service with valid OAuth credentials 
Calendar service = new Calendar.Builder(httpTransport, jsonFactory, credentials) 
    .setApplicationName("applicationName").build(); 

// Create a new calendar 
com.google.api.services.calendar.model.Calendar calendar = new Calendar(); 
calendar.setSummary("calendarSummary"); 
calendar.setTimeZone("America/Los_Angeles"); 

// Insert the new calendar 
Calendar createdCalendar = service.calendars().insert(calendar).execute(); 

System.out.println(createdCalendar.getId()); 

Дайте Try-it сухого хода, чтобы увидеть, если он работает.