for Calendars.CONTENT_URI如何检测日历是否为只读?

时间:2016-04-14 16:15:19

标签: android calendar

假日和生日日历的事件显然无法修改。一般来说,如何判断日历的事件是否为只读?我猜我可以查看CALENDAR_ACCESS_LEVEL列。任何人都知道,以及要检查的价值是什么?

2 个答案:

答案 0 :(得分:5)

是的,您需要检查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);

答案 1 :(得分:3)

除非有人纠正我,否则我会认为以下是正确答案。

通过

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");

我收到一份不包含假日或生日日历的清单。所以,我假设我得到的列表中的任何日历都是可写的,因此,我的应用程序可以轻松地让假期和生日只读。到目前为止,这个假设对我有用。