Adicionar evento de calendário no Android antes de ICS

No Android, antes do Ice Cream Sandwich, não há uma API oficial para lidar com eventos de calendário de maneira programática. Mas lidar com eles não é muito difícil, aqui está uma pequena dica (você pode descobrir que também em stackoverflow http://stackoverflow.com/questions/9482514/android-calendar-get-event-id/9749833#9749833 eu sou o autor de pergunta e resposta).

É bom saber que o calendário é baseado em sqlite.
Primeiro extraí uma lista de colunas usadas para armazenar eventos no calendário do Android. Aqui está a lista:

[0] “originalEvent” (id = 830007842672)

[1] “statusDisponibilidade” (id = 830007842752)

[2] “ownerAccount” (id = 830007842840)

[3] ” sync account_type” (id = 830007842920)

[4] “visibilidade” (id = 830007843008)

[5] “regra” (id = 830007843080)

[6] “lastDate” (id = 830007843144)

[7] “hasAlarm” (id = 830007843216)

[8] “guestsCanModify” (id = 830007843288) [9] “guestsCanSeeGuests” (id = 830007843376)

[10] “exrule” (id = 830007843464)

[11] “rdate” (id = 830007843528)

[12] “transparência” (id = 830007843592)

[13] “fuso horário” (id = 830007843672)

[14] “selecionado” (id = 830007843744)

[15] “dtstart” (id = 830007843816) [16] “título” (id = 830007843888)

[17] ” tempo de sincronização ” (id = 830007843952)

[18] “_id” (id = 830007844024) [19] “hasAttendeeData” (id = 830007844088)

[20] ” id de sincronização ” (id = 830007844176)

[21] “commentsUri” (id = 830007844248)

[22] “descrição” (id = 830007844328)

[23] “htmlUri” (id = 830007844408)

[24] ” sincronizar conta” (id = 830007844480)

[25] ” versão de sincronização ” (id = 830007844560)

[26] “hasExtendedProperties” (id = 830007844640)

[27] “calendar_id” (id = 830007844736)

Então, se eu quiser obter o novo id de evento para meu evento:

public static long getNewEventId(ContentResolver cr, Uri cal_uri){      
Uri local_uri = cal_uri;
if(cal_uri == null){
local_uri
= Uri.parse(calendar_uri+"events");
}
Cursor cursor = cr.query(local_uri, new String [] {"MAX(_id) as max_id"}, null, null, "_id");
cursor
.moveToFirst();
long max_val = cursor.getLong(cursor.getColumnIndex("max_id"));
return max_val+1;
}

E para inserir evento:

public void insertDomainEntry(Date exp_date, String name, long event_id){
SQLiteDatabase db = getWritableDatabase();
ContentValues values = new ContentValues();
values
.put("exp_date", exp_date.getTime()/1000);
values
.put("event_id", event_id);
values
.put("domainname", name);
db
.insertOrThrow("domains_events", null, values);
}

Essa solução parece funcionar, mesmo que provavelmente não seja uma solução muito boa.