2010-06-23 5 views
3

Mon objectif est de lire et d'écrire le calendrier.Lire et écrire Calendrier

je suis capable de lire les données du contenu: // calendrier/calendriers et contenu: // Calendrier/événements

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

    } 

} 

je suis aussi l'insertion de nouveau record dans le calendrier comme:

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

mais n'apparaît pas dans le calendrier.

quand je vais insérer de nouveaux événements dans le calendrier comme:

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

jeter exception cette colonne est invalide.

comment cela est possible. Merci

+0

Voici le tutoriel pour ajouter un événement unique à Occurrence un calendrier [Ajout d'un événement à événement unique à un calendrier] (http://www.developer.com/ws/article.php/3850276/Working-with-the-Android-Calendar.htm) – agiles

Répondre

7

Le fournisseur de contenu de calendrier ne fait pas partie du SDK Android. Il a changé entre les versions Android avant et le fera à nouveau. Il peut ne pas fonctionner sur certains appareils où ils ont remplacé l'application de calendrier par défaut par la leur.

Do not use undocumented content providers.

La solution est la même que the question you asked 32 minutes previously - utiliser les API GData Google Agenda pour manipuler le calendrier de l'utilisateur.

0

// Pour insérer l'événement au calendrier pour Android 2.2 et plus si moins 2,2 au lieu de contenu: //com.android.calendar écrire le contenu: // calendrier

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

dates ont été votées depuis la première question. Et aujourd'hui, il semble que le fournisseur de contenu de calendrier est bien documenté. (Peut-être depuis API 14?)

Pour la réponse courte à l'exception est la différence du type que vous donnez à la colonne et le type attendu. (Longtemps attendu pour dtstart au lieu de cordes)

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

Pour plus d'informations, il y a une autre ressource sur developer.android.com: http://developer.android.com/guide/topics/providers/calendar-provider.html

Questions connexes