2016-04-14 2 views
0

События для праздников и календарей дней рождения, по-видимому, не могут быть изменены. В общем, как узнать, доступны ли события календаря только для чтения? Я предполагаю, что я могу посмотреть на столбец CALENDAR_ACCESS_LEVEL. Кто-нибудь знает наверняка и какое значение (-ы) проверить?для Calendars.CONTENT_URI, как определить, доступен ли календарь только для чтения?

ответ

4

Да, вам необходимо проверить значение CALENDAR_ACCESS_LEVEL.

Вы должны получить все календарь со следующим уровнем доступа:

CAL_ACCESS_OWNER
Полный доступ к календарю

CAL_ACCESS_EDITOR
Полный доступ, чтобы изменить календарь, но не контроль доступа Установки

CAL_ACCESS_CONTRIBUTOR
Полный доступ, чтобы изменить календарь, но не параметры управления доступа

CAL_ACCESS_ROOT
администратор домена

Это пример, который возвращает все записываемые календари:

String selection = "(" + CalendarContract.Calendars.CALENDAR_ACCESS_LEVEL + " = ? OR " 
     + CalendarContract.Calendars.CALENDAR_ACCESS_LEVEL + " = ? OR " 
     + CalendarContract.Calendars.CALENDAR_ACCESS_LEVEL + " = ? OR " 
     + CalendarContract.Calendars.CALENDAR_ACCESS_LEVEL + " = ?)"; 

String[] selectionArgs = new String[]{ 
     Integer.toString(CalendarContract.Calendars.CAL_ACCESS_OWNER), 
     Integer.toString(CalendarContract.Calendars.CAL_ACCESS_EDITOR), 
     Integer.toString(CalendarContract.Calendars.CAL_ACCESS_CONTRIBUTOR), 
     Integer.toString(CalendarContract.Calendars.CAL_ACCESS_ROOT)}; 

Cursor cursor = getContentResolver().query(CalendarContract.Calendars.CONTENT_URI, null, selection, selectionArgs, null); 
+0

Из любопытства , как вы узнали об этом? Я довольно широко искал документацию, но ничего не нашел. –

+0

Также вы можете более подробно объяснить, что означает каждый из уровней доступа? У двух есть одно и то же описание. По-видимому, есть и другие уровни доступа, которые вы не показываете. Было бы полезно узнать, что они означают. Все, что я знаю, это краткие строки, которые вы воспроизвели в своей желтой области. Нет описания того, что они означают. –

+0

Документацию обо всех уровнях доступа к календарю можно найти здесь (http://developer.android.com/reference/android/provider/CalendarContract.CalendarColumns.html). Как вы видите, есть еще 5 уровней, которые не могут изменить календарь ('CAL_ACCESS_FREEBUSY',' CAL_ACCESS_NONE', 'CAL_ACCESS_OVERRIDE',' CAL_ACCESS_READ', 'CAL_ACCESS_RESPOND'). Каждый уровень доступа в желтой области также можно щелкнуть и открыть документацию, из которой было указано описание. К сожалению, нет более подробной информации о значении одного уровня. –

1

Я буду считать следующее правильным ответом, если кто-то не поправит меня.

Via

Cursor calCursor = context.getContentResolver().query(
     Calendars.CONTENT_URI, 
     projection, // whatever cols you want 
     (Calendars.VISIBLE + " = 1 and " + 
     Calendars.CALENDAR_ACCESS_LEVEL + " >= " + Calendars.CAL_ACCESS_CONTRIBUTOR), 
     null, 
     Calendars._ID + " ASC"); 

Я получаю список, который не включает в себя праздники или дни рождения календари. Итак, я предполагаю, что любой календарь в списке, который я получаю, можно записать и, таким образом, мое приложение может легко делать праздники и дни рождения только для чтения. Пока это предположение работает для меня.

Смежные вопросы