Получить календарь событий по дате в Android? - PullRequest
3 голосов
/ 01 августа 2011

Я хочу отобразить список событий из моего календаря на определенную дату. Я использую следующие

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

Этот код работает нормально, но он выводит общее количество событий из календаря. Но мне нужны события на конкретную дату, как 2011-08-15. Я попробовал следующий код

Cursor cursor = getContentResolver().query(Uri.parse("content://com.android.calendar/events"), new String[]{ "_id", "title", "description", "dtstart", "dtend", "eventLocation" }, "dtstart", new String[]{sdf.format(calender.getTime())}, null);       
        cursor.moveToFirst();   

Но я получаю исключение

Вызвано: android.database.sqlite.SQLiteException: нет такого столбца: Calendars.dtstart:, во время компиляции: SELECT _id, title, description, dtstart, dtend, eventLocation ОТ view_events ГДЕ (1) И (Calendars.dtstart)

Пожалуйста, дайте несколько советов, чтобы решить мою проблему

Ответы [ 4 ]

1 голос
/ 07 сентября 2016

Я сделал так:

String[] projection = new String[] { CalendarContract.Events.CALENDAR_ID, CalendarContract.Events.TITLE, CalendarContract.Events.DESCRIPTION, CalendarContract.Events.DTSTART, CalendarContract.Events.DTEND, CalendarContract.Events.ALL_DAY, CalendarContract.Events.EVENT_LOCATION };

Calendar startTime = Calendar.getInstance();

startTime.set(Calendar.HOUR_OF_DAY,0);
startTime.set(Calendar.MINUTE,0);
startTime.set(Calendar.SECOND, 0);

Calendar endTime= Calendar.getInstance();
endTime.add(Calendar.DATE, 1);

String selection = "(( " + CalendarContract.Events.DTSTART + " >= " + startTime.getTimeInMillis() + " ) AND ( " + CalendarContract.Events.DTSTART + " <= " + endTime.getTimeInMillis() + " ) AND ( deleted != 1 ))";
Cursor cursor = context.getContentResolver().query(CalendarContract.Events.CONTENT_URI, projection, selection, null, null);

List<String> events = new ArrayList<>();
if (cursor!=null&&cursor.getCount()>0&&cursor.moveToFirst()) {
      do {
          events.add(cursor.getString(1));
      } while ( cursor.moveToNext());
 }

Это даст сегодняшнее событие от провайдера контента Календаря.

Примечание: Управляет удаленными событиями провайдера контента.

Готово

0 голосов
/ 21 января 2018

Этот метод работает на 100% для меня, однако я попробовал несколько методов. Он получит все события и сохранит их в наборе. Затем вы можете проверить набор, есть ли событие в наборе или нет. Таким образом, вы можете проверить дубликат события

 public  Set<String> readCalendarEvent(Context context) {
    Cursor cursor = context.getContentResolver()
            .query(
                    Uri.parse("content://com.android.calendar/events"),
                    new String[] { "calendar_id", "title", "description",
                            "dtstart", "dtend", "eventLocation" }, null,
                    null, null);
    cursor.moveToFirst();
    // fetching calendars name
    String CNames[] = new String[cursor.getCount()];

    // fetching calendars id
    calendars.clear();

    Log.d("cnameslength",""+CNames.length);
    if (CNames.length==0)
    {
        Toast.makeText(context,"No event exists in calendar",Toast.LENGTH_LONG).show();
    }
    for (int i = 0; i < CNames.length; i++) {

        calendars.add(cursor.getString(1));
        CNames[i] = cursor.getString(1);
        cursor.moveToNext();



    }
    return calendars;
}
0 голосов
/ 15 мая 2013

См. Документация поставщика календаря эта ссылка

Я использую этот код, и он работает ..

ContentResolver contentResolver = context.getContentResolver();
Cursor cursor = contentResolver.query(Uri.parse("content://com.android.calendar/calendars"),    (new String[]   { Calendars._ID,  Calendars.ACCOUNT_NAME,  Calendars.CALENDAR_DISPLAY_NAME, }), null, null, null);
0 голосов
/ 10 ноября 2012

попробуйте этот код, я нахожусь в моем приложении, я использую это событие для отображения даты события;

ContentResolver contentResolver = mContext.getContentResolver();
                final Cursor cursor = contentResolver.query(Uri.parse("content://com.android.calendar/calendars"),
                        (new String[] { "_id", "displayName", "selected" }), null, null, null);

                HashSet<String> calendarIds = new HashSet<String>();                    
                while (cursor.moveToNext()) {                       
                    final String _id = cursor.getString(0);
                    final String displayName = cursor.getString(1);
                    final Boolean selected = !cursor.getString(2).equals("0");                      
                    //System.out.println("Id: " + _id + " Display Name: " + displayName + " Selected: " + selected);
                    calendarIds.add(_id);
                }

в этом фрагменте вы должны получить все события календаря в calendarIds ... теперь проверьте

for (String id : calendarIds) {
                    Uri.Builder builder = Uri.parse("content://com.android.calendar/instances/when").buildUpon();
                    long now = new Date().getTime();
                    ContentUris.appendId(builder, now - DateUtils.DAY_IN_MILLIS * 10000);
                    ContentUris.appendId(builder, now + DateUtils.DAY_IN_MILLIS * 10000);

                    Cursor eventCursor = contentResolver.query(builder.build(),
                            new String[] { "title", "begin", "end", "allDay"}, "Calendars._id=" + id,
                            null, "startDay ASC, startMinute ASC"); 
                    // For a full list of available columns see http://tinyurl.com/yfbg76w

                    while (eventCursor.moveToNext()) {
                        eventTitle = eventCursor.getString(0);
                        begin = new Date(eventCursor.getLong(1));
                        end = new Date(eventCursor.getLong(2));
                        allDay = !eventCursor.getString(3).equals("0");

                        eventDate = begin.getDate();
                        eventTime = begin.getHours();
                        eventMonth = begin.getMonth();
                        eventYear = begin.getYear();

                        event.add(eventTitle);
                        SimpleDateFormat sdfcur = new SimpleDateFormat("yyyy-MM-dd");  
                        String beginString = sdfcur.format(begin);
                        Date begindt = null;
                        try {
                            begindt = sdfcur.parse(beginString);
                            stringEventDate = begindt.getDate();
                            stringEventMonth = begindt.getMonth();
                            stringEventYear = begindt.getYear();

                        } catch (ParseException e1) {
                            // TODO Auto-generated catch block
                            e1.printStackTrace();
                        }

                         try {
                            Date dt = null;
                            dt = sdfcur.parse(onClickDate);
                                int passedday=dt.getDate();
                                int passedmonth = dt.getMonth();
                                int passedyear = dt.getYear();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...