Читать и писать календарь - PullRequest
3 голосов
/ 23 июня 2010

Моя цель - читать и писать Календарь.

Я могу читать данные из контента: // календарь / календари и контент: // календарь / события

String uriString = "content://calendar/calendars";
  Log.i("INFO", "Reading content from " + uriString);
  readContent(uriString);
  uriString = "content://calendar/events";
  Log.i("INFO", "Reading content from " + uriString);
  readContent(uriString);

private void readContent(String uriString) {

  Uri uri = Uri.parse(uriString);
  Cursor cursor = mContext.getContentResolver().query(uri, null, null,
    null, null);
  if (cursor != null && cursor.getCount() > 0) {
   cursor.moveToFirst();
   String columnNames[] = cursor.getColumnNames();
   String value = "";
   String colNamesString = "";
   do {
    value = "";

    for (String colName : columnNames) {
     value += colName + " = ";
     value += cursor.getString(cursor.getColumnIndex(colName))
       + " ||";
    }

    Log.e("INFO : ", value);
   } while (cursor.moveToNext());

  }

 }

Я также вставляю новую запись в календарь, например:

String calUriString = "content://calendar/calendars";
   ContentValues values = new ContentValues();
   values.put("name", "Code Generate Calendar");
   values.put("displayName", "Code Generate Calendar");
   values.put("hidden", 0);
   values.put("color", "-7581685");
   values.put("access_level", "700");
   values.put("selected", "1");
   values.put("timezone", "Asia/Karachi");

   Uri calendarUri = context.getContentResolver().insert(
   Uri.parse(calUriString), values);

но оно не отображается в календаре.

когда я собираюсь вставить новые события в календарь, как:

   ContentValues values = new ContentValues();
   values.put("calendar_id", 4);
   values.put("dtend", "1277337600000");
   values.put("dtstart", "1277251200000");
   // values.put("title", "first TEst event");
   values.put("transparency", 1);
   values.put("selected", 1);
   values.put("color", "-16380578");
   // values.put("lastDate", "6/25/2010");
   //values.put("access_level", 700);
   values.put("eventStatus", 1);
   values.put("eventTimezone", "UTC");
   values.put("timezone", "Asia/Karachi");
   values.put("allDay", 1);
   String eventUriString = "content://calendar/events";
   Uri eventUri = context.getContentResolver().insert(
   Uri.parse(eventUriString), values);

выдает исключение, что столбец недействителен.

как это возможно. Спасибо

Ответы [ 3 ]

7 голосов
/ 23 июня 2010

Поставщик содержимого календаря не является частью Android SDK. Это изменилось между выпусками Android раньше и будет делать это снова. Он может не работать на некоторых устройствах, где они заменили приложение календаря по умолчанию своим собственным.

Не используйте провайдеров недокументированного контента.

Решение такое же, как и вопрос, который вы задали 32 минуты назад - используйте API Календаря Google для управления календарем пользователя.

0 голосов
/ 15 сентября 2015

Даты были пройдены с момента первого вопроса. И сегодня кажется, что поставщик контента календаря хорошо документирован. (Может быть, начиная с API 14?)

Для краткого ответа на исключение используется разница типа, который вы даете столбцу, и ожидаемого типа. (долгое время ожидается для dtstart вместо String)

http://developer.android.com/reference/android/provider/CalendarContract.EventsColumns.html#DTSTART

Для получения дополнительной информации на developer.android.com есть еще один ресурс: http://developer.android.com/guide/topics/providers/calendar-provider.html

0 голосов
/ 20 апреля 2012

// Чтобы вставить событие в календарь для android 2.2 и выше, если оно меньше 2.2, вместо содержимого: //com.android.calendar записать содержимое: // calendar

String calUriString = "content://com.android.calendar/events";
            ContentValues values = new ContentValues();

values.put("calendar_id",2); //id, We need to choose from our mobile for primary its 1
values.put("title", "Birthday");
values.put("description", "Go home at 2pm");
values.put("eventLocation", "Home");
long startTime = System.currentTimeMillis() + 1000 * 60 * 60*24; // Next day

values.put("dtstart", startTime);
values.put("dtend", startTime);

values.put("allDay", 1); //If it is bithday alarm or such kind (which should remind me for whole day) 0 for false, 1 for true

values.put("eventStatus", 1); // This information is sufficient for most entries tentative (0), confirmed (1) or canceled (2):

values.put("visibility", 3); // visibility to default (0), confidential (1), private (2), or public (3):

values.put("transparency", 0); // You can control whether an event consumes time  opaque (0) or transparent (1).

values.put("hasAlarm", 1); // 0 for false, 1 for true


Uri calendarUri = getApplicationContext().getContentResolver().insert(Uri.parse(calUriString), values);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...