Calendario de Android, obtener ID de evento

Estoy escribiendo una aplicación que necesita agregar algunos eventos a un calendario en android. Para insertar acabo de usar el siguiente código:

public void onItemClick(AdapterView<?> adapter, View curview, int position, long id) { WhoisEntry entry = this.adapter.getItem(position); String domainName = entry.getDomainName(); Date expDate = entry.expirationDate; Toast.makeText(getApplicationContext(), "Domain: " + domainName, Toast.LENGTH_SHORT).show(); Calendar cal = Calendar.getInstance(); Intent intent = new Intent(Intent.ACTION_EDIT); intent.setType("vnd.android.cursor.item/event"); intent.putExtra("beginTime", entry.expirationDate); intent.putExtra("allDay", false); intent.putExtra("endTime", cal.getTimeInMillis()+60*60*1000); intent.putExtra("title", "Expiration of " + entry.domainName); startActivity(intent); } 

Ahora me pregunto si es posible obtener una identificación asociada a ese evento, de esa manera después de insertar un evento, y su id se guarda en mi aplicación, el usuario puede recordar ese evento directamente desde dentro de la aplicación. ¿Es posible?

He extraído una lista de columnas utilizadas para almacenar eventos en el calendario android. Aquí la lista:

[0] "originalEvent" (id = 830007842672)
[1] "availabilityStatus" (id = 830007842752)
[2] "ownerAccount" (id = 830007842840)
[3] "_sync_account_type" (id = 830007842920)
[4] "visibilidad" (id = 830007843008)
[5] "rrule" (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] "transparencia" (id = 830007843592)
[13] "timezone" (id = 830007843672)
[14] "seleccionado" (id = 830007843744)
[15] "dtstart" (id = 830007843816) [16] "title" (id = 830007843888)
[17] "_sync_time" (id = 830007843952)
[18] "_id" (id = 830007844024) [19] "hasAttendeeData" (id = 830007844088) [20] "_sync_id" (id = 830007844176)
[21] "commentsUri" (id = 830007844248) [22] "descripción" (id = 830007844328) [23] "htmlUri" (id = 830007844408) [24] "_sync_account"
[25] "_sync_version" (id = 830007844560)
[26] "hasExtendedProperties" (id = 830007844640)
[27] "calendar_id" (id = 830007844736)

Entonces, si quiero obtener el nuevo id de evento para mi 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; } 

Y para insertar 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); } 

Esa solución parece funcionar, aunque probablemente esta no sea una solución muy buena.

EDIT 02/2015 El propósito de getNextEventId es crear una nueva entrada de evento para la tabla de eventos, aquí el código con el uso de este método:

 @Override public void onItemClick(AdapterView<?> adapter, View curview, int position, long id) { WhoisEntry entry = this.adapter.getItem(position); long event_id = CalendarUtils.getNewEventId(getContentResolver(), null); Toast.makeText(getApplicationContext(), "Domain: " + entry.getDomainName(), Toast.LENGTH_SHORT).show(); Intent intent = new Intent(Intent.ACTION_EDIT); intent.setType("vnd.android.cursor.item/event"); intent.putExtra("beginTime", entry.getExpiration().getTime()); intent.putExtra("_id", event_id); intent.putExtra("allDay", false); intent.putExtra("endTime", entry.getExpiration().getTime()+60*30); intent.putExtra("title", "Expiration of " + entry.getDomainName()); startActivity(intent); database.insertDomainEntry(entry.getExpiration(), entry.getDomainName(), event_id); } 

Actualización 09/2015

Como se solicita en el comentario, agrego cómo obtener el URI del calendario (es básicamente donde se almacena el calendario y la aplicación intenta adivinarlo, buscando en todas las posibles rutas de calendario conocidas)

 public static String getCalendarUriBase(Activity act) { String calendarUriBase = null; Uri calendars = Uri.parse("content://calendar/calendars"); Cursor managedCursor = null; try { managedCursor = act.getContentResolver().query(calendars, null, null, null, null); } catch (Exception e) { } if (managedCursor != null) { calendarUriBase = "content://calendar/"; } else { calendars = Uri.parse("content://com.android.calendar/calendars"); try { managedCursor = act.getContentResolver().query(calendars, null, null, null, null); } catch (Exception e) { } if (managedCursor != null) { calendarUriBase = "content://com.android.calendar/"; } } calendar_uri= calendarUriBase; return calendarUriBase; } 
  • Set / Get Java List <> del código C
  • Devuelve el recuento de registros en una variable, Sqlite, Android, Java
  • La conversión al formato de Dalvik falló: No se puede ejecutar dex: Los archivos múltiples dex definen Lcom / squareup / okhttp / Address;
  • Permitir sólo la entrada de datos únicos con Android SQLite?
  • ArcMenu mainImage Necesito en la parte inferior de la pantalla. OnMeasure no lo deja entrar en la parte inferior de la pantalla
  • ¿Cómo comprobar si "Radiobutton" está marcado?
  • Quiero referirme a una variable no final dentro de una clase interna definida en un método diferente
  • Compilando la cadena como código durante el tiempo de ejecución en Android
  • ¿Qué significa poner signo "$" antes de un parámetro en Java / Android?
  • ¿Cómo se comprueba si ya se ha cerrado una instancia de reino?
  • ¿Vincular XML de android a una clase de Java?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.