Android阅读日历事件

时间:2014-07-04 16:22:44

标签: android calendar android-contentprovider

我试图创建一个界面来选择calenar事件,但我遇到了一些问题。在我的设备上,我收到了正确的事件,但我的许多用户报告说功能不起作用,有些用户甚至在日历中显示的事件也没有。在一台4.1三星设备上,我在应用程序上测试时崩溃了,所以我想知道的是;显示所有日历事件列表的正确方法是什么?这是我现在正在使用的代码:

 Cursor cursor = getActivity().getContentResolver().query(Uri.parse
("content://com.android.calendar/events"),
 new String[]{"calendar_id", "title", "description",
"dtstart", "dtend", "eventLocation"}, "calendar_id=1", null, null);

        cursor.moveToFirst();

        int length = cursor.getCount();

        for (int i = 0; i < length; i++) {

                CalendarEvent ce = new CalendarEvent();

                ce.setTitle(cursor.getString(1));
                ce.setNote(cursor.getString(2));
                ce.setDate(cursor.getLong(3));

                if (cursor.getString(1).length() > 0) {
                    mItems.add(ce);
                }

                cursor.moveToNext();
        }

        cursor.close();

1 个答案:

答案 0 :(得分:2)

我怀疑罪魁祸首是这种情况:"calendar_id=1"

设备可以有多个日历。不能保证id = 1的那个是主要的那个(即使你使用了主要的那个,用户也可能在多个不同的日历中有事件 - 例如个人和工作)。

所以,这取决于你想要做什么。你应该:

  • 使用主日历(带有IS_PRIMARY的日历,但请参阅上面的警告)或
  • 让用户选择一个日历来使用您的应用(查询Calendars table),然后再使用calendar_id
  • 如果您想要所有日历中的活动,请移除calendar_id过滤器。