3 Stimmen

Kalender lesen und schreiben

Mein Ziel ist es, Kalender zu lesen und zu schreiben.

Ich bin in der Lage, Daten aus content://calendar/calendars und content://calendar/events zu lesen.

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

  }

 }

Ich füge auch neue Datensätze in den Kalender ein:

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

aber er erscheint nicht im Kalender.

Wenn ich neue Ereignisse in den Kalender einfüge, z. B. :

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

eine Ausnahme auslösen, dass die Spalte ungültig ist.

wie dies möglich ist. Danke

8voto

CommonsWare Punkte 950864

Der Anbieter von Kalenderinhalten ist nicht Teil des Android SDK. Er hat sich in der Vergangenheit zwischen verschiedenen Android-Versionen geändert und wird dies auch in Zukunft tun. Es kann sein, dass er auf einigen Geräten nicht funktioniert, wenn diese die Standard-Kalenderanwendung durch ihre eigene ersetzt haben.

Verwenden Sie keine undokumentierten Inhaltsanbieter.

Die Lösung ist dieselbe wie die Frage, die Sie 32 Minuten zuvor gestellt haben -- verwenden die Google Calendar GData APIs, um den Kalender des Nutzers zu manipulieren.

0voto

Pradeep Punkte 2466

// Zum Einfügen von Ereignissen in den Kalender für Android 2.2 und höher, wenn weniger als 2.2 statt content://com.Android.calendar write content://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);

0voto

9re Punkte 2368

Seit der ersten Frage sind bereits einige Zeit vergangen. Und heute scheint es, als ob der Anbieter von Kalenderinhalten gut dokumentiert ist. (Vielleicht seit API 14?)

Denn die kurze Antwort auf die Ausnahme ist der Unterschied zwischen dem Typ, den Sie der Spalte geben, und dem erwarteten Typ. (long erwartet für dtstart anstelle von String)

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

Für weitere Informationen gibt es eine weitere Ressource auf developer.Android.com: http://developer.Android.com/guide/topics/providers/calendar-provider.html

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X